\documentstyle[german, dina4]{report}
\pagestyle{headings}
\frenchspacing
\fboxsep0.1mm
\title{Edt\\ \& \\Edt für M2Amiga 4.3\\ Version 1.0}
\author{J. Barheine\\ Hochgrevestr. 3\\ D-38640 Goslar}

\begin{document}

\maketitle

\tableofcontents

\chapter{Der Editor "`Edt"'}

Bei {\sf Edt} handelt es sich um einen fensterorientierten Texteditor zur
Bearbeitung von ASCII--Textdateien. Er verfügt über eine Vielzahl von Funktionen
die über Menüs, die Tastatur oder mit der Maus ausgeführt werden können. Der
Editor kann mit wenig Aufwand an die speziellen Wünsche des Benutzers angepaßt
werden, da sowohl die Tastaturbelegung als auch die Menüs frei programmierbar
sind --- ein wenig Kenntnis der Programmiersprache ARexx vorausgesetzt. Aber auch
ohne Kenntnisse von ARexx läßt sich {\sf Edt} flexibel konfigurieren.

{\bf Hinweis:} {\sf Edt} benötigt ARexx um zu funktionieren. Dazu muß das Programm
{\sf RexxMast} vorher gestartet werden. {\sf RexxMast} befindet sich in der Schublade
{\sl Utilities} und sollte in die Schublade {\sl WBStartup} gelegt werden, damit ARexx
nach jedem Neustart zur Verfügung steht.

\section{Starten des Editors}

{\sf Edt} läßt sich sowohl von der Workbench als auch von der Shell starten. Für
jede als Argument übergebene Textdatei wird ein Fenster geöffnet, so daß mehrere
Texte gleichzeitig bearbeitet werden können. Die Fenster verfügen über zwei
Rollbalken und eine Titelzeile in der der Name der Datei (ohne Pfadkomponente),
die Anzahl vorgenommener Änderungen und die Position und Länge des
Textes ständig angezeigt werden.

\begin{verbatim}
Edt#0 - Texts.mod: 197 Änder.; Pos.: 16; 913 / 1.205 - <EINF>
\end{verbatim}

Am Ende der Titelzeile wird der Modus in dem der Editor gerade arbeitet angezeigt.
\verb@<EINF>@ besagt, daß sich der Editor im Einfügemodus, \verb@<ÜBRS>@, daß er
sich im Überschreib--Modus befindet. \verb@<WORTUMBR>@ steht für den automatischen
Zeilenumbruch. Die Option \verb@<AUFNAHME>@ schließlich zeigt an, daß im Editor
gerade ein Makro\footnote{eine Folge von Editor--Kommandos} aufgezeichnet wird.

Jedesmal wenn {\sf Edt} gestartet wird, führt er ein Startup--Programm aus, mit dem
sowohl die Menü- als auch die Tastaturbelegung installiert wird. {\sf Edt} sucht das
Startup--Programm zuerst im aktuellen Verzeichnis unter dem Namen
{\sl Edt--Startup\_D.edt} (bzw. {\sl Edt--Startup\_GB.edt}\footnote{abhängig
davon, welche Sprache im Voreinsteller {\sl Locale} eingestellt wurde}\/), dann im
Verzeichenis {\sl S:} unter demselben Namen. Wenn kein Startup--Skript gefunden
werden konnte bricht {\sf Edt} mit einer Fehlermeldung ab.

Neben den voreingestellten Pfaden für das Startup--Skript, kann der Dateiname des
Skripts auch explizit angegeben werden. Hierzu dient auf der Workbench das
Merkmal (engl. Tooltype) {\sc With}. Wenn der Editor nicht das Startup-Programm
{\sl S:Edt--Startup\_D.edt} ausführen soll, sondern z.B. das Programm
{\sl S:MyStartup.edt}, muß dazu in den Merkmalen des Piktogramms die Zeile

\begin{verbatim}
WITH=S:MyStartup.edt
\end{verbatim}

eingetragen werden. Der analoge Aufruf von der Shell aus lautet:

\begin{verbatim}
Edt WITH S:MyStartup.edt.
\end{verbatim}

\label{PubScreen}
{\sf Edt} läßt sich auch auf sog. öffentlichen Schirmen (Public Screens) öffnen.
Hierzu dient das Merkmal/Schlüsselwort {\sc Pubscreen}, dem der Name des
betreffenden Schirms zu übergeben ist. Wenn der Editor z.B. voreingestellt auf
seinem eigenen Schirm läuft, und er auf der Workbench geöffnet werden soll, muß
den Merkmalen die Zeile

\begin{verbatim}
PUBSCREEN=Workbench
\end{verbatim}

hinzugefügt werden. Auch hier lautet der Aufruf von der Shell analog

\begin{verbatim}
Edt PUBSCREEN Workbench.
\end{verbatim}

Schon diese beiden Optionen reichen aus, um {\sf Edt} in zwei verschiedenen
Umgebungen zu verwenden. Ein gutes Beispiel hierfür wäre der zusätzliche Einsatz
des Editors als System--Texteditor auf der Workbench. Hierzu müßten zwei
Exemplare des Editors erzeugt und die Merkmale einer Kopie entsprechend
angepaßt werden. Z.B.:

\begin{verbatim}
WITH=S:SysStartup.edt
PUBSCREEN=Workbench
\end{verbatim}

Statt der Datei {\sl S:SysStartup.edt} könnte hier natürlich eine beliebige andere
Datei stehen. Es handelt sich bei dieser Datei um eine von Ihnen auf die
persönlichen Bedürfnisse zugeschnittenen Variante der Datei {\sl Edt--Startup\_D.edt}.
Sie könnten in dieser Datei beispielsweise das Menü "`Modula--2"' weglassen oder
die Funktionen zum Einrücken von Textblöcken.

Beim Umleiten des Editors auf öffentliche Schirme werden die Einstellungen,
die Sie in den verschiedenen Dialogfenstern und dem Menü "`Einstellungen"' machen,
vollkommen unabhängig voneinander verwaltet. Zusätzlich zu den
Vorgabe-Einstellungen\footnote{gespeichert in der Datei {\sl ENV:Edt/Default}}
existiert für jeden öffentlichen Schirm ein separater Satz von
Einstellungen\footnote{unter {\tt ENV:Edt/\sl schirmname} gespeichert}, so daß
Sie z.B. die Druckoptionen oder die Größe des Editorfensters für die Workbench
anpassen können, ohne die Einstellungen für die M2Amiga--Umgebung zu beeinflussen.

Wenn Sie ein anderes Programm umgekehrt auf dem Edt--Schirm laufen
lassen möchten, können Sie diesen unter dem Namen "`Edt"' erreichen. Z.B.:

\begin{verbatim}
MultiView PUBSCREEN Edt test.guide
\end{verbatim}

Sie können dem Schirm über den Menüpunkt "`Darstellung"' im Menü
"`Einstellungen"' jedoch auch einen anderen Namen geben. Wenn Sie dort z.B.
"`M2Amiga Screen"' eintrugen, so würde eben gananntes Beispiel so lauten:

\begin{verbatim}
MultiView PUBSCREEN "M2Amiga Screen" test.guide.
\end{verbatim}

\subsection{Ed--Kompatibilität}

Durch die eben genannten Merkmale und Schlüsselwörter ist {\sf Edt} im Regelfall
kompatibel zu dem Systemeditor {\sf Ed} von Commodore. Es macht daher Sinn, ein Alias
zu definieren, um {\sf Edt} anstelle von {\sf Ed} aufzurufen. Wenn Sie Ihrer Datei
{\sl S:user-startup} folgende Zeilen hinzufügen, wird beim Aufruf von {\sf Ed} in
der Kommandozeile stattdessen {\sf Edt} gestartet.

\begin{verbatim}
alias Ed Edt WITH S:SysStartup.edt PUBSCREEN Workbench []
\end{verbatim}

Die Datei {\sl S:SysStartup.edt} bezeichnet wie im obigen Beispiel eine von Ihnen
abgeänderte Startup--Datei. Wenn Sie nun beispielsweise die Datei
{\sl S:user--startup} bearbeiten möchten, geben Sie wie gewohnt ein:

\begin{verbatim}
Ed S:user-startup.
\end{verbatim}

\section{Arbeitsweise}

Grundsätzlich läßt sich {\sf Edt} in ähnlicher Weise bedienen wie andere
Texteditoren auch. Zeichen, die in den laufenden Text eingefügt werden sollen,
brauchen nur getippt zu werden. Mit der Return--Taste können Sie einen
Zeilenumbruch erzeugen. Das Zeichen das sich gerade unter dem Cursor
befindet, kann mit der Del--Taste, dasjenige unmittelbar vor dem Cursor mit
der Backspace--Taste gelöscht werden. Alle nachfolgenden Zeichen rücken
entsprechend nach.

Mit den Pfeiltasten können Sie sich buchstaben- bzw. zeilenweise im Text
bewegen. Wenn die Schreibmarke am Ende einer Zeile steht gelangen Sie
mit der $\rightarrow$--Taste an den Anfang der nächsten Zeile. Der Cursor
kann weder hinter das Zeilenende bewegt werden, noch ist es möglich, den
Cursor über die letzte Zeile des Textes hinaus zu positionieren.

Unter Zuhilfenahme der Alt-- und der Ctrl--Taste können Sie die Schreibmarke
schnell über größere Strecken bewegen. So bewirkt das Drücken der Alt--Taste
gleichzeitig mit einer Pfeiltaste das Verschieben des Cursor zum vorherigen
oder nächsten Wort ({\sf Alt/$\leftarrow$} und {\sf Alt/$\rightarrow$}), oder
das Blättern um eine Seite vor oder zurück ({\sf Alt/$\uparrow$} und
{\sf Alt/$\downarrow$}). Die Shift--Taste vergrößert den Schritt auf
den Anfang oder das Ende der Zeile ({\sf Shift/$\leftarrow$} und
{\sf Shift/$\rightarrow$}). Mit {\sf Shift/$\uparrow$} gelangen
Sie in die erste, mit {\sf Shift/$\downarrow$} in die letzte Zeile des Textes.

Zusätzlich können Sie die Schreibmarke auch mit der Maus positionieren. Dazu
klicken Sie einfach die Auswahltaste, nachdem Sie den Mauszeiger über die
gewünschte Stelle gebracht haben.

Die Maus kann auch dazu benutzt werden, einen bestimmten Bereich (Selektion)
eines Textes zu markieren und mit den Funktionen des Menüs "`Bearbeiten"' zu
kopieren, einzurücken oder mit anderen Programmen auszutauschen\footnote{hierzu
wird der systemweite Zwischenspeicher (engl. clipboard) genutzt}.
Hierzu drücken Sie die Auswahltaste über dem Anfang des zu markierenden
Bereiches, halten Sie, und bewegen sich nun zum Ende der Selektion und lassen
dort die Auswahltaste los\footnote{Dieser Vorgang wird auch {\it Auswahl durch
Ziehen} genannt.}. Wie Sie sehen, wird der Bereich nun farblich
hervorgehoben. Der Markiervorgang kann mittendrin abgebrochen werden, indem bei
gedrückter Auswahltaste die Menütaste gedrückt wird und dann beide Tasten
losgelassen werden.

Beim Markieren eines Bereichs kennt der Editor zwei Modi: {\em zeichen\/}weises
Markieren und {\em zeilen\/}weises Markieren. Während beim zeichenweisen
Markieren nicht nur ganze Zeilen, sondern auch Teile von Zeilen markiert werden
können, arbeitet der zeilenweise Modus nur mit ganzen Zeilen. Er wird
aktiviert, indem zusätzlich die Shift--Taste gedrückt wird und weiter wie oben
verfahren wird.

Die Markierung können Sie wieder aufheben, indem Sie den Menüpunkt
"`Markierung löschen"' im Menü "`Bearbeiten"' auswählen.

\subsection{Das Menü "`Einstellungen"'}

Das Grundverhalten des Editors wird über das Menü "`Einstellungen"' gesteuert.
Wenn der Menüpunkt "`einfügen?"' abgehakt ist, befindet sich der Editor im
Einfügemodus, d.h. alle Tastatureingaben werden an der Position der
Schreibmarke in den Text eingefügt. Ist er nicht abgehakt, befindet sich der
Editor im Überschreibmodus: Der Text unter der Schreibmarke wird mit den
Tastatureingaben überschrieben. Der Menüpunkt "`Wortumbruch?"' steuert den
automatischen Zeilenumbruch (Pseudo--Wordwrap). Wenn der Cursor beim Schreiben
einen definierten rechten Rand überschreitet, wird ein Zeilenumbruch eingefügt
und das eben geschriebene Wort in die neue Zeile übernommen. Ebenfalls mit
dem Zeilenumbruch hängt der Menüpunkt "`automatisch einrücken?"' zusammen. Ist
er aktiviert, wird bei einem Zeilenumbruch die neue Zeile um den selben Betrag
einrückt wie die vorherige. Wenn "`Zeilen säubern?"' aktiviert ist, löscht der
Editor beim Speichern (unnötige) Leerzeichen an den Zeilenenden und leere Zeilen
am Ende des Textes --- das Speichern dauert dadurch nur wenig länger.
"`Piktogramme?"' bestimmt, ob für die bearbeitete Datei beim Speichern Piktogramme
erzeugt werden sollen oder nicht. Hierzu verwendet der Editor möglichst das
Piktogramm {\sl txt} aus der Schublade {\sl M2:Icons}.

\subsection{Fenstertechnik}

Zur Darstellung der Textdateien benutzt der Editor normale Fenster, wie sie auch
von der Workbench verwendet werden. Konzeptionell unterscheidet das Programm streng
zwischen Text und Fenster. Während der Text sich immer auf eine physikalische
Datei bezieht, dienen Fenster allein zur Anzeige des Textes. Es ist somit auch
möglich, mehrere Fenster für ein und denselben Text zu öffnen, wobei diese Fenster
ansonsten vollkommen unabhängig voneinander agieren. Jedes Fenster besitzt z.B.
einen eigenen Satz Lesezeichen und auch eigene Einstellungen für das Suchen und
Ersetzen.

\subsection{Dialogfenster}

Zur Bedienung des Editors werden an den verschiedensten Stellen Dialogfenstern
eingesetzt. Zusätzlich zu der Möglichkeit, die Daten mit Hilfe der Maus einzugeben,
können Sie diese Fenster {\em vollständig} mit der Tastatur bedienen. Zu diesem Zweck
exististiert zu jedem Symbol eine Tastaturabkürzung, bestehend aus einer einzelnen
Taste. Diese Taste kann alternativ benutzt werden, um die Funktion des jeweiligen
Symbols auszulösen. Sie ist in den Beschriftungen der Symbole mit einem
Unterstrich versehen (z.B. "`\underline{A}bbrechen"'). Die folgende Tabelle
beschreibt die Funktion der Tastaturabkürzung abhängig von der Art des
Symbols:\\[0.5ex]

\begin{tabular}{l|l}
Symbol--Art & Funktion\\
\hline
Aktionssymbol & Auslösen der Aktion\\
Auswahlfeld & Status umschalten: an/aus\\
Blättersymbol & um eine Option weiter blättern\\
Texteingabefeld & Texteingabefeld aktivieren\\
Textanzeigefeld & Eintragung ändern
\end{tabular}\\[0.5ex]

Die Texteingabefelder verfügen über weitere Tastaturfunktionen. Im Gegensatz
zu den eben besprochenen Tastaturalternativen sind diese Funktionen nur
{\em innerhalb} der Felder verfügbar:\\[0.5ex]

\begin{tabular}{l|p{6cm}}
Taste & Funktion\\
\hline
Return & bestätigt die Eingaben und aktiviert das nächste Feld\\
Escape & bestätigt die Eingaben ohne das nächste Feld zu aktivieren\\
Tab & bestätigt die Eingaben und aktiviert das nächste Feld\\
Shift/Tab & bestätigt die Eingaben und aktiviert das vorherige Feld\\
Amiga/X & löscht alle Zeichen\\
Amiga/Q & setzt Feld auf den Ausgangszustand zurück\\
Shift/$\leftarrow$ & setzt den Cursor zum Zeilenanfang\\
Shift/$\rightarrow$ & setzt den Cursor ans Zeilenende\\
Shift/Del & löscht alle Zeichen rechts und unter dem Cursor\\
Shift/Backspace & lösche alle Zeichen links vom Cursor
\end{tabular}

\subsection{Lesezeichen}

Nicht selten möchte man einen Quelltext an mehreren Stellen gleichzeitig
modifizieren, ohne hierzu gleich mehrere Fenster zu öffnen. Um das Wechseln
zwischen den verschiedenen Positionen möglichst schnell zu gestalten, bietet
der Editor sog. Lesezeichen an, die es ermöglichen, mit einem einzigen
Tastendruck direkt an eine vorher gemerkte Position zu springen.
Ein Lesezeichen wird definiert, in dem man die Shift--Taste zusammen mit einer
der ersten fünf Funktionstasten drückt. Dies weist dem Lesezeichen 1 bis 5 die
aktuelle Cursorposition zu. Diese kann jederzeit angesprungen werden, indem die
jeweilige Funktionstaste {\em ohne} Shift gedrückt wird.

Die Lesezeichen bieten zudem den Vorteil, daß sie jede Textänderung mitverfolgen. Wenn
z.B. vor dem Lesezeichen Text eingefügt wird, und sich somit die Zeilennummer
ändert, wird das Lesezeichen mit verschoben. Es steht weiterhin an dem selben Wort
wo es zu Beginn war, auch wenn sich die Positon (Spalte u. Zeilennummer) im Text
geändert hat. Dieses Verhalten erleichtert z.B. die Arbeit mit Fehlerlisten vom
Compiler ungemein, da Fehler im Quelltext Stück für Stück korrigiert werden können.

\subsection{Textfalten}

Um große Programmtexte übersichtlich zu gestalten, besitzt der Editor sog.
Textfalten. Textfalten verstecken einen bestimmten Textabschnitt, so daß nur die
erste Zeile, Faltenkopf genannt, sichtbar ist. Textfalten können durch Markieren
mit der Maus bei gleichzeitig gehaltener Ctrl--Taste erzeugt und durch Doppelklicken
mit der linken Maustaste geöffnet und geschlossen werden. Auf diese Weise versteckte
Bereiche werden sowohl beim Suchen als auch beim Ersetzen nicht berücksichtigt.
Hingegen wird der Inhalt einer geschlossenen Textfalte jedoch immer mit in den
Zwischenspeicher kopiert und auch beim Drucken berücksichtigt.

Die Aufteilung eines Textes mittels Falten geht beim Verlassen des Editors nicht
verloren. Sie wird im zugehörigen Piktogramm gespeichert, das unabhängig vom
Menüpunkt "`Einstellungen/Piktogramme?"' erzeugt wird, sobald eine Falte existiert.

\subsection{Sicherheitskopien}

Gelegentlich kommt es vor, daß man mit den Änderungen, die man an einem Text
vorgenommen und gespeichert hat, nicht zufrieden ist und die vorherige Version
des Textes wiederbeschaffen möchte. Aus diesem Grund bewahrt {\sf Edt} neben der
aktuellen Datei bis zu drei weitere Versionen eines Textes als Sicherheitskopie
auf. Diese werden durch eine charakteristische Endung im Dateinamen von der
aktuellen Datei unterschieden. Die jüngste Datei erhält dabei die Endung
"`\$0"', die zweitjüngste "`\$1"' und die älteste Sicherheitskopie die Endung
"`\$2"'. Um die Übersicht zu wahren, werden diese Sicherheitskopien im
Dateiauswahlfenster normalerweise {\em nicht} angezeigt. Wenn Sie eine ältere Version
einer Datei laden möchten, müssen Sie daher erst das Feld "`Muster"' im
Dateiauswahlfenster löschen, damit alle Verzeichniseinträge angezeigt werden.

\subsection{Automatisches Speichern (Autosave)}

Ebenfalls der Datensicherheit dient die Möglichkeit, einen Text in regelmäßigen
Abständen automatisch speichern zu lassen (engl. autosave), um so einem eventuellen
Datenverlust durch einen Stromausfall oder einen Absturz vorzubeugen. Auf
Wunsch speichert {\sf Edt} deshalb den aktuellen Zustand eines Textes in einer
Nebendatei zwischen, die nach dem regulären Verlassen des Textes wieder gelöscht
wird. Wenn nun während des Editierens der Computer aus irgend einem Grunde
abstürzt, bleibt diese Nebendatei erhalten. Die Verluste halten sich somit in
Grenzen. Besagte Datei ist nach dem Neustarten des Rechners leicht aufzufinden:
Sie befindet sich im selben Verzeichnis wie der betroffene Text und unterscheidet
sich von ihm nur durch die Endung "`\$A"' im Dateinamen. Wie die Sicherheitskopien
werden auch die Autosave--Dateien normalerweise nicht im Dateiauswahlfenster
dargestellt. Es reicht jedoch, die zuletzt gespeicherte Version des betroffenen
Textes selbst zu laden, da der Editor die Zwischendateien automatisch erkennt und
--- nach Rückfrage --- stattdessen lädt.

\section{Tastenbelegung}

Dieser Abschnitt beschreibt in Kurzform alle die Funktionen, die für die
Bearbeitung eines Textes so elementar sind, daß Sie nur über die Tastatur
erreichbar sind, sowie Befehle die, obwohl auch in den Menüs aufgeführt,
sicherlich meistens über die Tastatur aufgerufen werden.

\subsection{Cursor--Tasten}

\begin{tabular}{l|l}
Kennung & Funktion\\
\hline
$\uparrow$ & Cursor um eine Zeile nach oben bewegen\\
$\downarrow$ & Cursor um eine Zeile nach unten bewegen\\
$\leftarrow$ & Cursor ein Zeichen zurück setzen\\
$\rightarrow$ & Cursor ein Zeichen weiter bewegen\\
Alt/$\uparrow$ & eine Seite zurück blättern\\
Alt/$\downarrow$ & eine Seite vorwärts blättern\\
Alt/$\leftarrow$ & Cursor um ein Wort zurück bewegen\\
Alt/$\rightarrow$ & Cursor um ein Wort vorwärts bewegen\\
Shift/$\uparrow$ & Cursor in die erste Zeile des Textes setzen\\
Shift/$\downarrow$ & Cursor in die letzte Zeile des Textes setzen\\
Shift/$\leftarrow$ & Cursor an den Zeilenanfang bewegen\\
Shift/$\rightarrow$ & Cursor zum Ende der Zeile bewegen
\end{tabular}

\subsection{Lösch--Tasten}

\begin{tabular}{l|l}
Kennung & Funktion\\
\hline
Del & Zeichen unter dem Cursor löschen\\
Backspace & Zeichen vor dem Cursor löschen\\
Alt/Del & Wort unter dem Cursor löschen\\
Alt/Backspace & Wort vor dem Cursor löschen\\
Ctrl/Del & Zeile unter dem Cursor löschen\\
Shift/Del & Alle Zeichen bis zum Zeilenende (exklusive) löschen\\
Shift/Backspace & Alle Zeichen links von dem Cursor löschen
\end{tabular}

\subsection{Ctrl--Taste}

\begin{tabular}{l|l}
Kennung & Funktion\\
\hline
Ctrl/Backspace & Zeile über dem Cursor löschen\\
Ctrl/Del & Zeile unter dem Cursor löschen\\
Ctrl/Alt/D & Markierten Bereich löschen\\
Ctrl/E & Einfügemodus an/aus\\
Ctrl/W & Wortumbruchmodus an/aus\\
Ctrl/A & Automatisch einrücken an/aus\\
Ctrl/Z & Zeilen säubern an/aus\\
Ctrl/P & Piktogrammerzeugung an/aus\\
Ctrl/G & zuletzt eingegebenen ARexx--Befehl wiederholen\\
Ctrl/X & ARexx--Skript ausführen
\end{tabular}

\subsection{Alt--Taste}

\begin{tabular}{l|l}
Kennung & Funktion\\
\hline
Alt/B & Aufzeichnung eines Makros starten\\
Alt/E & aktuelles Makro abschließen\\
Alt/F & aktuelles Makro vergessen/löschen\\
Alt/N & nächstes Vorkommen ersetzen\\
Alt/P & vorheriges Vorkommen ersetzen\\
Alt/S & aktuelles Makro als ARexx--Programm in einer Datei speichern\\
Alt/X & aktuelles Makro wiederholen
\end{tabular}

\subsection{Funktionstasten}

\begin{tabular}{l|l}
Kennung & Funktion\\
\hline
F1..F5 & Lesezeichen 1..5 anspringen\\
Shift/F1..Shift/F5 & Lesezeichen 1..5 an die Cursorposition setzen\\
Alt/F1 & Fenster horizontal teilen\\
Alt/F2 & Fenster vertikal teilen\\
Alt/F3 & Fenster gleichmäßig auf dem Bildschirm anordnen\\
Alt/F4 & Neues Fenster auf den aktuellen Text öffnen\\
Alt/F5 & Text in ein neues Fenster laden\\
F6..F10 & zugewiesenes Makro ausführen\\
Shift/F6..Shift/F10 & der Taste F6..F10 das aktuelle
Makro zuweisen
\end{tabular}

\subsection{Weitere Tasten}

\begin{tabular}{l|l}
Kennung & Funktion\\
\hline
ESC & ARexx--Befehlszeile eingeben\\
Return & Zeilenumbruch einfügen\\
Enter & wie Return
\end{tabular}

\section{Die Menüs}

\subsection{Das Menü "`Projekt"'}

\begin{description}

\item[Neu:]\label{PRJ_Neu} Beginnt einen neuen Text. Wenn an dem vorher
bearbeiteten Textspeicher vorgenommene Änderungen noch nicht gesichert wurden,
so erscheint vorher eine Sicherheitsabfrage. Dann stehen folgende Alternativen
zur Auswahl:

\begin{tabular}{lp{7cm}}
\sf Speichern & alten Text vorher speichern\\
\sf Speichern Als & alten Text vorher unter anderem Namen speichern\\
\sf Nicht Speichern & alten Text nicht speichern, alle Änderungen werden vergessen\\
\sf Abbrechen & Operation abbrechen, kein neuer Text wird begonnen
\end{tabular}

\item[Neues Fenster:] Öffnet ein weiteres Fenster auf den bearbeiteten Text.
Sie können so ein und dieselbe Datei in mehreren Fenstern an verschiedenen
Positionen zugleich bearbeiten. Die Anzahl der Fenster in denen ein Textspeicher
bearbeitet werden kann ist theoretisch unbegrenzt.

\item[Öffnen:]\label{PRJ_Oeffnen} Lädt einen neuen Text. Dazu wird ein
Dateiauswahlfenster geöffnet, in dem Sie mit der Maus den zu ladenden Text
auswählen können. In dem Dateiauswahlfenster werden normalerweise folgende
Dateien nicht angezeigt\footnote{Sie können dieses Verhalten leicht ändern,
indem Sie das "`Muster"'--Feld im Dateiauswahlfenster anpassen und
anschließend den Menüpunkt "`als Vorgaben speichern"' betätigen.}:

\begin{itemize}
\item Sicherheitskopien, d.h. ältere Versionen einer Textdatei
\item Zwischenkopien der Datei (Autosave)
\item Piktogramme
\end{itemize}

Als Alternative zu dem Dateiauswahlfenster können Sie, wenn sich der
Editor auf dem Workbench-Screen befindet, einen Text laden, indem Sie sein
Piktogramm über dem Editor--Fenster fallen lassen.

Wenn Sie an dem alten Text noch Änderungen vorgenommen haben, ohne diese
zu speichern, erhalten Sie in einer Sicherheitsabfrage verschiedene
Möglichkeiten, wie Sie weiter fortfahren.

\begin{tabular}{lp{8cm}}
\sf Speichern & alten Text vorher speichern\\
\sf Speichern Als & alten Text vorher unter anderem Namen speichern\\
\sf Nicht Speichern & alten Text nicht speichern, vorgenommene Änderungen werden
vergessen\\
\sf Abbrechen & Operation abbrechen, der ausgewählte Text wird nicht geladen
\end{tabular}

\item[Speichern:]\label{PRJ_Speichern} Speichert den bearbeiteten Text.
Wenn Sie dem Text noch keinen Dateinamen zugewiesen haben, können Sie dieses
an dieser Stelle nachholen. Bestehende Datei--Attribute, wie z.B. das
Skript--Flag werden hierbei nicht angetastet.

\item[Speichern als:]\label{PRJ_SpeichernAls} Speichert den bearbeiteten Text
unter einem neuen Namen. Hierzu wird ein Dateiauswahlfenster geöffnet, in dem
der Name ausgewählt werden kann. Wenn bereits eine Datei des eingegebenen
Namens existiert, so wird diese komplett überschrieben, so daß bestehende
Datei--Attribute oder Datei--Kommentare wie bei dem Menüpunkt "`Speichern"'
erhalten bleiben.

\item[Einfügen:] Fügt den Inhalt einer Text--Datei vor der Schreibmarke ein.
Hierzu wird ähnlich dem Menüpunkt "`Öffnen"' ein Dateiauswahlfenster geöffnet.

\item[Drucken:]\label{PRJ_Drucken} Druckt den angezeigten Text aus. In dem
erscheinenden Dialogfenster können Schriftart, Zeilenabstand und Layout des
Ausdrucks eingestellt werden, sowie verschiedene Zusatzoptionen.

\subsubsection{Das Dialogfenster "`Drucken"'}\label{D_Drucken}

\begin{tabular}{lp{8cm}}
\sf Linker Rand & linker Rand in Zeichen\\
\sf Rechter Rand & rechter Rand in Zeichen\\
\sf Papierlänge & Papierlänge in Zeilen\\
\sf Abstand & Abstand zwischen den Spalten in Zeichen\\
\sf Druckdichte & Größe der Schrift; steht hier "`Drucker"' so ist die
gewünschte Schriftgröße auf Aufforderung manuell am Drucker einzustellen\\
\sf Zeilendichte & Dichte bzw. Abstand der Zeilen\\
\sf Druckqualität & Qualität und Geschwindigkeit des Ausdrucks\\
\sf Formatierung & druckt die Datei mehrspaltig formatiert aus;
überlange Zeilen im Text werden auf dem Ausdruck über mehrere Zeilen verteilt\\
\sf Zeilennummern & nummeriert die Zeilen auf dem Ausdruck beginnend mit null\\
\sf Titel & Kopfzeile enthält Dateinamen (ohne Pfad)\\
\sf Seitenzahl & Kopfzeile enthält Seitenzahl\\
\sf Datum & Kopfzeile enthält aktuelles Datum\\
\sf Zeit & Kopfzeile enthält aktuelle Zeit
\end{tabular}

\item[Über:]\label{PRJ_Ueber} Zeigt Informationen über das Programm und den
bearbeiteten Text an:

\begin{itemize}
\item Autor, Copyright, u.s.w.
\item Name des ARexx--Ports
\item Dateiname
\item Länge der Datei in Zeichen/Bytes und Zeilen (sichtbar + versteckt)
\item Position in Zeichen, Zeile und Spalte (von null an gezählt)
\item Anzahl vorgenommener Änderungen
\item Anzahl Falten
\item Markierung vorhanden: ja/nein
\end{itemize}

\item[Beenden:]\label{PRJ_Beenden} Schließt alle Fenster und beendet den Editor.
Wenn in irgend einem der bearbeiteten Texte noch ungespeicherte Änderungen
vorhanden sind, erhalten Sie vorher die Möglichkeit, diese geänderten Texte
zu speichern oder in den Editor zurückzukehren.

\begin{tabular}{lp{8cm}}
\sf Beenden & Editor verlassen, ohne geänderte Texte zu speichern\\
\sf Speichern & vorher jeden geänderten Text einzeln und nach Rückfrage speichern\\
\sf Abbrechen & Operation abbrechen, der Editor wird nicht beendet
\end{tabular}

\item[Verlassen:]\label{PRJ_Verlassen} Schließt das Fenster. Wenn am bearbeiteten
Text noch Änderungen vorhanden sind, erfolgt eine Sicherheitsabfrage:

\begin{tabular}{lp{7cm}}
\sf Speichern & Text vorher speichern\\
\sf Speichern als & Text vorher unter einem anderen Namen speichern\\
\sf Nicht Speichern & Text nicht speichern, Änderungen werden vergessen\\
\sf Abbrechen & Operation abbrechen, das Fenster wird nicht geschlossen
\end{tabular}

\end{description}

\subsection{Das Menü "`Bearbeiten"'}

\begin{description}

\item[Ausschneiden:] Kopiert den markierten Bereich in die Zwischenspeicher
und löscht ihn dann.

\item[Kopieren:] Kopiert den markierten Bereich in die Zwischenspeicher.
Im Unterschied zu "`Ausschneiden"' wird er jedoch nicht gelöscht. Nach
erfolgtem Kopieren wird die Markierung entfernt. Wenn die Markierung
erhalten bleiben soll, müssen Sie die Startup--Datei ändern. Suchen Sie
die Befehle {\tt Copy; Unmark} und ersetzten Sie sie durch {\tt Copy}.

\item[Einfügen:] Fügt den Inhalt des Zwischenspeichers an der aktuellen
Cursorposition ein.

\item[Löschen:] Löscht den markierten Bereich ohne ihn in den Zwischenspeicher
zu kopieren.

\item[Speichern:] Speichert den markieren Bereich in einer separaten Datei.
Der Dateiname kann in einem Dateiauswahlfenster angegeben werden.

\item[Drucken:] Druckt den markierten Text aus. In dem erscheinenden
Dialogfenster können Schriftart, Zeilenabstand und Layout des Ausdrucks
eingestellt werden, sowie verschiedene Optionen. Die Elemente des
Dialogfensters sind bei der Beschreibung des gleichnamigen Menüpunktes
im Menü "`Projekt"' dokumentiert (s. Seite \pageref{D_Drucken}).

\item[Einrücken:] Rückt die markierten Zeilen um den angegebenen Betrag ein,
d.h. verschiebt Sie nach rechts.

\item[Ausrücken:] Rückt die markierten Zeilen um den angegebenen Betrag aus,
d.h. verschiebt Sie nach links.

\item[Bereich-Anfang:] Setzt den Anfang der Selektion an die Position der
Schreibmarke.

\item[Bereich-Ende:] Setzt das Ende der Selection an die gegenwärtige
Cursorposition. Wenn noch kein Bereich-Anfang definiert war, wird die
gesamte Zeile in der sich der Cursor befindet, einschließlich Zeilenumbruch,
markiert.

\item[Markierung löschen:] Hebt die Markierung auf. Eine Selektion ist also
undefiniert.

\item[Alle nochmal:] Führt alle Änderungen, die durch "`(alle) rückgängig"'
zurückgenommmen wurden, erneut durch.

\item[Alle rückgängig:] Macht alle gemerkten Änderung rückgängig bis der
Änderungen--Zähler auf null steht.

\item[Nochmal:] Nimmt die letzte via "`rückgängig"' zurückgenommene Änderung
erneut vor. Stellt also den Zustand vor dem letzten Aufruf von "`rückgängig"'
wieder her.

{\bf Wichtiger Hinweis:} Wenn Sie seit dem letzten Aufruf von "`rückgängig"'
bereits Änderungen am Text vorgenommen haben, schlägt dieses Kommando fehl.

\item[Rückgängig:] Macht die letzte am Text vorgenommene Änderung rückgängig.

\end{description}

\subsection{Das Menü "`Suchen"'}

\begin{description}

\item[Suchen:]\label{BRB_Suchen} Sucht eine Zeichenkette. Es wird ein
Dialogfenster geöffnet, in dem die zu findene Zeichenkette und verschiedene
Optionen eingegeben werden können.

\subsubsection{Das Dialogfenster "`Suchen"'}\label{D_Suchen}

\begin{tabular}{lp{7cm}}
\sf Suchen & zu suchende Zeichenkette; Return schließt zugleich
die Eingabe im Dialogfenster ab\\
\sf Groß=Klein & Groß-/Kleinschreibung nicht beachten\\
\sf Wort Suchen & Suchbegriff ist ein einzelnes Wort\footnote{Unter Wörtern werden
Folgen von Buchstaben und Ziffern verstanden (z.B. "`Buch"', "`12"', "`index00"').},
nicht Bestandteil eines anderen Wortes\\
\sf Suchen & nächstes Vorkommen suchen\\
\sf Rückwärts Suchen & vorheriges Vorkommen suchen
\end{tabular}

\item[Ersetzen:]\label{BRB_Ersetzen} Sucht eine Zeichenkette und ersetzt sie
durch eine andere. Es wird ein Dialogfenster geöffnet, in dem die zu suchende
und die an ihrer Stelle einzusetzende Zeichenkette, sowie verschiedene Optionen
eingegeben werden können.

\subsubsection{Das Dialogfenster "`Suchen und Ersetzen"'}\label{D_SuchenUndErsetzen}

\begin{tabular}{lp{7cm}}
\sf Suchen & zu suchende Zeichenkette\\
\sf Ersetzen & dafür einzusetzende Zeichenkette; Return schließt zugleich
die Eingabe im Dialogfenster ab\\
\sf Groß=Klein & Groß-/Kleinschreibung nicht beachten\\
\sf Wort Suchen & Suchbegriff ist ein einzelnes Wort\\
\sf Verbinden & Änderungen verbinden\\
\sf Ersetzen & nächstes Vorkommen ersetzen\\
\sf Rückwärts Ersetzen & vorheriges Vorkommen ersetzen
\end{tabular}

Wenn ein Vorkommen der gesuchten Zeichenkette gefunden wurde, wird die
Schreibmarke dorthin gesetzt und ein weiteres Dialogfenster geöffnet.

\subsubsection{Das Dialogfenster "`Ersetzen?"'}\label{D_Ersetzen}

\begin{tabular}{lp{9cm}}
\sf Ja & ersetzt das Vorkommen unter dem Cursor und geht zum nächsten\\
\sf Nein & überspringt das Vorkommen\\
\sf Alle & ersetzt {\em alle} Vorkommen ab der Schreibmarke; wenn im
Dialogfenster "`Suchen und Ersetzen"' der Schalter "`Änderungen verbinden"'
gesetzt war, werden alle nun vorgenommenen Textänderungen als eine Einheit
behandelt und können mit einem einzigen Aufruf des Menüpunkts "`rückgängig"'
aufgehoben werden\\
\sf Beenden & beendet das Ersetzen
\end{tabular}

\item[Nächstes suchen:] Geht zum nächsten Vorkommen der bei "`Suchen"'
(s. Seite \pageref{D_Suchen}) oder "`Ersetzen"' (s. Seite \pageref{D_SuchenUndErsetzen})
eingegebenen Zeichenkette unter Beachtung der dort getätigten Einstellungen.

\item[Vorheriges suchen:] Geht zum vorherigen Vorkommen der bei "`Suchen"'
(s. Seite \pageref{D_Suchen}) oder "`Ersetzen"' (s. Seite \pageref{D_SuchenUndErsetzen})
eingegebenen Zeichenkette unter Beachtung der dort getätigten Einstellungen.

\item[Nächstes ersetzen:] Ersetzt das nächste Vorkommen der bei "`Ersetzen"'
(s. Seite \pageref{D_SuchenUndErsetzen}) eingegebenen Zeichenkette unter Beachtung
der dort getätigten Einstellungen.

\item[Vorheriges ersetzen:] Ersetzt das vorherigen Vorkommen der bei
"`Ersetzen"' (s. Seite \pageref{D_SuchenUndErsetzen}) eingegebenen Zeichenkette unter
Beachtung der dort getätigten Einstellungen.

\item[Gehen zu:] Setzt die Schreibmarke in eine anzugebende Zeile. Die
Zeile kann in einem Dialogfenster eingegeben werden, das mit der
Bestätigung der Eingabe durch die Return--Taste geschlossen wird.

\item[Letzte Änderung:] Setzt die Schreibmarke an die Position
der letzten Änderung.

\item[Passende Klammer:] Setzt die Schreibmarke auf die zur Klammer
unter dem Cursor passende Gegen--Klammer. Unterstützt werden neben
runden auch eckige und geschweifte Klammern.
\end{description}

\subsection{Das Menü "`Textfalten"'}

\begin{description}

\item[Falte erzeugen:]\label{FLT_FalteErzeugen} Erzeugt aus dem markierten
Bereich eine Textfalte und schließt sie. Sollte sich der markierte Bereich
mit bereits existierenden Textfalten überschneiden, so werden diese vorher
aufgelöst.

\item[Falte öffnen:] Öffnet die Textfalte unter der Schreibmarke. Alternativ
dazu können Sie auch über dem Faltenkopf doppelt klicken.

\item[Falte schließen:] Schließt die Textfalte in der der Cursor sich befindet.
Stattdessen können Sie auch mit der Maus doppelt in das Falteninnere klicken.

\item[Falte auflösen:] Öffnet die unter der Schreibmarke befindliche Textfalte
und löst sie auf. Wenn ein Textfalte aufgelöst wird, bedeutet das, daß
der vorher gefaltete Bereich nicht mehr als Falte betrachtet wird. Der
Zustand vor dem Erzeugen der Textfalte wird also hergestellt.

\item[Alle Falten öffnen:] Öffnet alle im Text befindlichen Falten.

\item[Alle Falten schließen:] Schließt alle im Text befindlichen Falten.

\item[Alle Falten auflösen:] Löst alle im Text vorhandenen Falten.

\end{description}

\subsection{Das Menü "`Fenster"'}

\begin{description}

\item[Nächstes Fenster:] Blättert die Fenster vorwärts durch. Das nächste
Fenster in der Fensterliste wird in den Vordergund gebracht und aktiviert.

\item[Vorheriges Fenster:] Blättert die Fenster rückwärts durch. Das
vorherige Fenster der Editor--Fensterliste wird in den Vordergund gebracht
und aktiviert.

\item[Nächster Text:] Blättert die Texte vorwärts durch. Der nächste Text der
Editor-Textliste wird in den Vordergund gebracht und aktiviert.

\item[Vorheriger Text:] Blättert die Texte rückwärts durch. Der vorherige
Text der Editor-Textliste wird in den Vordergund gebracht und aktiviert.

\item[Maximal:] Bringt das Fenster auf maximale Größe, so daß es die gesamte freie
Bildfläche unter der Schirm-Titelleiste einnimmt.

\item[Minimal:] Bringt das Fenster auf die kleinst mögliche Größe.

\item[Horizontal teilen:] Teilt das Fenster horizontal in zwei jeweils halb
so breite Fenster auf.

\item[Vertikal teilen:] Teilt das Fenster vertikal in zwei jeweils halb so
hohe Fenster auf.

\item[Aufräumen:] Verteilt die Fenster gleichmäßig auf dem Schirm.

\end{description}

\subsection{Das Menü "`ARexx"'}

\begin{description}

\item[Makro beginnen:]\label{RX_MakroBeginnen} Beginnt die Aufzeichung eines
ARexx--Makros. In einem Dialogfenster kann der Umfang der aufzuzeichnenden
Eingaben festgelegt werden. Die Auswahlsymbole bestimme welche Benutzereingaben
{\em zusätzlich} zu allen per Tastatur- und Menükommando ausgeführten Funktionen
aufgezeichnet werden sollen.

\begin{tabular}{lp{6cm}}
\sf Mausaktionen & zeichnet zusätzlich alle Mausaktionen auf\\
\sf Texteingaben & aufnehmen des eingegebenen Textes\\
\sf ARexx-Befehlszeilen & setzt die bei "`Befehl eingeben"' eingetippte
Befehlszeile direkt in das Makro ein\\
\sf ARexx-Programmaufrufe & setzt einen Aufruf des bei "`Programm ausführen"'
ausgewählten Programmes in das Makro ein\\
\sf Änderungen zusammenfassen & erzeugt ein Makro dessen Änderungen am Text
mit einem einzigen Aufruf rückgängig gemacht werden können\\
\end{tabular}

Die Auswahlpunkte zum Thema ARexx wirken sich in der Weise aus, als daß das
Makro nicht die Aufrufe der Dialogfenster selbst enthält, sondern das was der
Benutzer dort während der Aufnahme des Makros eingegeben hat. Wenn z.B. ein
Befehl in das Makro aufgenommen soll der in der Weise nicht als Menü- oder
Tastaturkommando verfügbar ist, so kann dieser manuell über die
ARexx--Befehlseingaben in das Makro eingefügt werden.

item[Makro abschließen:] Beendet die Aufzeichnung des Makros. Die
aufgezeichneten Befehle können nun mit den weiteren Befehlen dieses
Menüs z.B. nochmals ausgeführt oder gespeichert werden.

\item[Makro ausführen:] Führt das im Speicher befindliche Makro aus.

\item[Makro vergessen:] Löscht das aufgezeichnete Makro. Ein Makro
ist somit nicht mehr definiert.

\item[Makro speichern:] Speichert das aufgezeichnete Makro als
ARexx--Programm in einer Datei. In dem Dateiauswahlfenster kann der
Dateiname eingegeben werden.

\item[Makro zuweisen:] Weist das Makro einer bestimmten Taste zu. Wenn
diese Taste nun gedrückt wird, führt Edt das Makro nochmals durch. Sie
können jeder Taste ein verschiedenes Makro zuweisen. Die Zuweisung hat
solange Bestand, bis Sie von der Zuweisung eines anderen Makros auf
die selbe Taste überschrieben wird.

\item[Befehl eingeben:] Öffnet ein Dialogfenster in dem eine
ARexx--Kommandofolge eingegeben werden kann.

\item[Befehl wiederholen:] Wiederholt die bei "`Befehl eingeben"' eingegebenen
Kommandos.

\item[Programm ausführen:] Führt ein ARexx--Skript für {\sf Edt} aus.
Es wird ein Dateiauswahlfenster geöffnet, in dem Sie das Programm
auswählen können.

\end{description}

\subsection{Das Menü "`Modula--2"'}

Dieses Kapitel ist nur gültig für die spezielle M2Amiga-Version des Editors. Die
hier genannten Operationen sind bei {\sf Edt} nicht verfügbar.

\begin{description}

\item[Fehler lesen:] Lädt die Fehlerliste der bearbeiteten Datei und springt
zum ersten Fehler.

\item[Nächste Fehler:] Springt zum nächsten Fehler in der Fehlerliste. Wenn
keine weiteren Fehler vorhanden sind, so wird dies in der Titelleiste angezeigt.

\item[Vorheriger Fehler:] Springt zum vorherigen Fehler in der Liste.

\item[Erster Fehler:] Geht zum ersten Fehler der geladenen Fehlerliste.

\item[Übersetzen:] Übersetzt den aktuellen Text: dieser muß vorher gespeichert
werden. Zum Übersetzen muß der Compiler {\sf m2c} aktiv (bereits gestartet) sein,
da er  über seine ARexx--Schnittstelle direkt angesteuert wird. Falls bei der
Übersetzung Fehler im Quelltext gefunden wurden, werden diese am Anschluß angezeigt.

\item[Binden:] Bindet das bearbeitete Modul zu einem Hauptprogramm. Hierzu muß
der Linker {\sf m2l} aktiv sein, da er über seine ARexx--Schnittstelle angesteuert
wird.

\item[Erzeugen:] Startet das Make-Werkzeug {\sf m2make} für den bearbeiteten Text.

\item[Ausführen:] Führt das angezeigte Programm im CLI-Modus aus. Wenn Parameter
an das Programm übergeben werden sollen, so kann dies in dem Dialogfenster
geschehen, daß vor der Ausführung geöffnet wird.

\item[Umlaute?:] Wenn dieser Punkt deaktiviert ist, werden die Umlauttasten
(ö, ä, ü, ß) so umdefiniert, daß statt der deutschen Umlaute ihre internationalen
Äquivalente (oe, ae, ue, ss) ausgegeben werden. Diese Einstellung gilt für
alle Fenster des Editors zugleich.

\end{description}

\subsection{Das Menü "`Einstellungen"'}

Dieses Menü steuert die Arbeitsweise des Editors. Es enthält u.a. auch
umschaltbare Menüpunkte\footnote{mit "`Haken"'}. Diese Umschalter beziehen
sich jeweils auf den in dem Fenster bearbeiteten Text, haben also in allen
Fenstern auf den bearbeiteten Text den selben Zustand (abgehakt/nicht abgehakt).
Im Gegensatz zu den textbezogenen Umschaltern, wirken die Dialogfenster
der Menüpunkte "`Bearbeitung"' und "`Darstellung"' global, d.h. auf alle
Texte zugleich. Der letzte Menüpunkt schließlich dient zum Abspeichern sowohl
der Einstellungen in diesem Menü, als auch anderer Details, wie z.B. der
Fenstergröße.

\begin{description}

\item[Einfügen?:] Ist dieser Menüpunkt aktiviert, werden alle Zeichen die
über Tastatur eingegeben werden in den laufenden Text eingefügt. Ist er inaktiv
werden die Zeichen unter der Schreibmarke mit den Tastatureingaben
überschrieben\footnote{Ausnahme: Zeilenumbruch}.

\item[Wortumbruch?:] Wenn dieser Punkt aktiviert ist, fügt der Editor während der
Texteingabe automatisch Zeilenumbrüche ein, wenn die Schreibmarke den im
Dialogfenster "`Bearbeitung"' (s. Seite \pageref{D_Bearbeitung}) definierten rechten
Rand überschreitet.

\item[Automatisch einrücken?:] Rückt bei einem Zeilenumbruch die neue Zeile um
denselben Betrag wie die vorhergehende ein.

\item[Zeilen säubern?:] Entfernt beim Speichern Leerzeichen an Zeilenenden
und leere Zeilen am Ende des Textes.

\item[Piktogramme?:] Dieser Schalter gibt an, ob beim Speichern des Textes
Piktogramme erzeugt werden sollen. Ein Piktogramm wird jedoch nur dann
erzeugt, wenn bisher noch keines vorhanden war. Existierende Piktogramme
werden also {\em nicht} überschrieben. Lediglich die Tooltypes werden
geändert, jedoch werden auch hier Editor-fremde Tooltypes erhalten.

\item[Bearbeitung:] Es wird ein Dialogfenster geöffnet, in dem Einstellungen
bezüglich der Textbearbeitung vorgenommen werden können.

\subsubsection{Das Dialogfenster "`Bearbeitung"'}\label{D_Bearbeitung}

\begin{tabular}{lp{7.5cm}}
\sf Tabs. konvertieren & wandelt Tabulatorzeichen beim Speichern des Textes
in Leerzeichen um\\
\sf Falten schließen & speichert Textfalten in geschlossenem Zustand\\
\sf Position merken & merkt sich beim Speichern der Datei die Position
der letzten Änderung; Wenn der Text das nächste Mal geladen wird, springt
der Editor automatisch an diese Position, so daß Sie ihre Arbeit ohne
Verzögerung dort fortsetzten können, wo Sie das letzte Mal aufgehört haben.\\
\sf History & schaltet die History-Funkion des Editors an/aus;
Wenn diese Option abgeschaltet ist, merkt sich der Editor am Text vorgenommene
Änderungen {\em nicht}. Die Kommandos "`rückgängig"', "`nochmal"', u.s.w. bleiben
ohne Wirkung.\\
\sf H.-Puffergr. & Anzahl der gemerkten Textänderungen\\
\sf Tabulator & Breite der horizontalen Tabulatoren (in Zeichen)\\
\sf Rand & rechter Rand für den automatischen Zeilenumbruch (in Zeichen)\\
\sf Autos.-Invervall & Intervall für Autosave in Minuten\\
\sf Sicherheitskopien & Anzahl der aufbewahrten Versionen einer Datei\\
\sf Autosave & Zwischenspeichern des Textes in regelmäßigen Zeitabständen
\end{tabular}

{\bf Hinweis:} Durch Bestätigung der Eingaben via "`OK"' werden die hier
vorgenommenen Einstellungen {\em nicht} gespeichert. Dieses muß explizit
über den Menüpunkt "`als Vorgaben speichern"' erfolgen.

\item[Darstellung:] Es wird ein Dialogfenster geöffnet, in dem Einstellungen
die die graphische Darstellung im Editor betreffen, vorgenommen werden können.

\subsubsection{Das Dialogfenster "`Darstellung"'}\label{D_Darstellung}

\begin{tabular}{lp{8cm}}
\sf Schirmtyp & Typ des Schirms. Steht hier "`Eigener Schirm"', so öffnet
{\sf Edt} einen eigenen Schirm mit frei einstellbarem Anzeigemodus.
"`Öffentlicher Schirm"' bedeutet, daß {\sf Edt} seine Fenster auf dem Schirm
eines fremden Programms öffnet, "`Workbench"' schließlich, daß {\sf Edt} auf
dem Workbench-Schirm arbeitet. Da der Editor jedoch auch mittels seiner
Merkmale (Tooltypes) auf Öffentlichen Schirmen (z.B. Workbench) geöffnet
werden kann (s. Seite \pageref{PubScreen}), empfiehlt sich hier die Einstellung
"`Eigenener Schirm"'.\\
\sf Schirmname & Wenn der Editor einen eigenen Schirm öffnet, steht
hier der Name unter dem der Schirm beim System registriert wird. Dieser Name
ist anzugeben (Merkmal {\sc Pubscreen}), wenn fremde Programme ihre Fenster auf
dem Schirm des Editors öffnen sollen. Wenn der Editor selbst seine Fenster
auf dem Schirm eines anderen Programmes öffnen soll (Schirmtyp =
"`Öffentlicher Schirm"'), muß hier der Name eingetragen werden, unter dem wiederum
dieser fremde Schirm registriert ist.\\
\sf Anzeigemodus & Wenn {\sf Edt} einen eigenen Schirm öffnet, so steht hier
der Anzeigemodus dieses Schirms. Über das rechts von diesem Feld stehende
Fragezeichen kann dieser Modus über eine Dialogfenster frei eingestellt werden.\\
\sf Zeichensatz & Hier steht der Name und die Größe des Zeichensatzes, in
dem der bearbeitete Text angezeigt wird. Über das Fragezeichen rechts, kann
dieser Zeichensatz frei gewählt werden.\\
\sf Faltenkopf & Hiermit kann die Kennzeichnung von Faltenköpfen, d.h. der ersten
,immer sichtbaren, Zeile einer Textfalte, bestimmt werden. "`Invers"' bedeutet, daß
die Zeile invers, d.h. hellgrau auf schwarz gezeichnet wird. Steht hier
"`Hervorgehoben"', so wird der Text in der Farbe für hervorgehobenen Text
(normalerweise weiß) gezeichnet, bei "`Fettgedruckt"' wird der Text in fetter
Schrift wiedergegeben.\\
\sf Rollsymbole & Die Größe der Rollsymbole an den Fensterrändern. "`Normal"'
steht für die übliche Größe, wie sie auch die Workbench verwendet, "`Groß"' für
sehr große Rollsymbole, die bei hoher Auflösung (z.B. 1024x768 auf einem 15-Zoll
Monitor) leichter zu bedienen sind.
\end{tabular}

{\bf Hinweis:} Durch Bestätigung der Eingaben via "`OK"' werden die hier
vorgenommenen Eintragungen noch {\em nicht} gespeichert. Dieses muß über
den Menüpunkt "`als Vorgaben speichern"' erfolgen. Weiterhin ist zu beachten,
daß bis auf die Punkte "`Faltenkopf"' und "`Zeichensatz"' alle hier gemachten
Einstellungen erst wirksam werden, wenn man sie als Vorgaben speichert und den
Editor neu startet.

\item[Als Vorgaben speichern:]\label{EIN_AlsVorgabenSpeichern} Speichert alle im
Editor vorgenommenen Einstellungen und macht sie zur Vorgabe für den verwendeten
Schirm. Folgende Daten werden gespeichert:

\begin{itemize}
\item Position und Ausmaße des aktiven Editorfensters
\item Ausmaße und Muster des Dateiauswahlfensters
\item alle Optionen in den Dialogfenstern "`Suchen"', "`Ersetzen"' und "`Drucken"'
\item alle Einstellungen in diesem Menü außer "`Piktogramme?"'
\end{itemize}

\end{description}

\section{Programmierung in ARexx}

\subsection*{Konventionen}

Die Syntaxbeschreibung ist in einer an EBNF\footnote{Erweiterter Backus-Naur
Formalismus} angelehnten Notation angegeben. Platzhalter stehen in
{\tt\sl schräggestellter} Schreibmaschienenschrift, optionale Argumente
in eckigen Klammern ("`[...]"'). Argumente die beliebig oft
wiederholt werden können, werden in geschweifte Klammern ("`\{...\}"') gefaßt.
Runde Klammern ("`(...)"') dienen der Gruppierung. Alternativen werden durch
"`$|$"' getrennt. Argumente werden durch Leerzeichen getrennt, so daß
Strings die Leerzeichen enthalten in Anführungszeichen (\verb@'...'@),
(\verb@"..."@), (\verb@`...`@) gefaßt werden müssen. Von dieser Regel wird
abgewichen, wenn das Argument an letzter Stelle steht.

\subsection{Texte}

\begin{description}

\item[FirstText:] Macht den ersten Text in der internen Textliste zum aktuellen
Text, auf den sich alle weiteren Operationen beziehen. Gleichzeitig wird auch
ein Fenster, in dem dieser Text angezeigt wird zum aktuellen Fenster.

{\bf Hinweis:} Das aktuelle Fenster zeigt auch immer den aktuellen Text an.
Das Wechseln des aktuellen Textes ändert also auch immer das aktuelle Fenster,
ebenso wie das Wechseln des aktuellen Fensters --­ wenn in dem neuen Fenster nicht
derselbe Text angezeigt wird --­ auch den aktuellen Text wechselt.

\item[ForceAutosave:] Erzwingt das Zwischenspeichern des Textes wenn die
Autosave--Option aktiviert ist (s.a. Seite \pageref{EIN_Bearbeitung}).

\item[InsertFile:] {\it Syntax:\/} {\tt InsertFile [{\sl filename}].}
{\it Resultat:\/} \verb@1|0.@ Fügt den Inhalt der Datei
{\tt\sl filename} vor der Schreibmarke in den Text ein. Wenn das Argument fehlt,
kann der Benutzer den Namen der einzufügende Datei in einem Dateiauswahlfenster
eingeben. Das Resultat gibt an, ob tatsächlich eine Datei eingefügt wurde.

\item[LastText:] Macht den letzten Text in der internen Textliste zum
aktuellen Text.

\item[New:] {\it Resultat:\/} \verb@1|0.@ Erzeugt einen neuen Text im
aktuellen Fenster und macht ihn zum aktuellen Text. Wenn der vorher in diesem
Fenster angezeigte Text verändert wurde und keine weiteren Fenster auf ihn
existieren, erhält der Anwender vorher die Möglichkeit den Text zu speichern
oder die Operation abzubrechen (s.a. "`Neu"', \ref{PRJ_Neu}, Seite
\pageref{PRJ_Neu}). Dem Resulat kann entnommen werden, ob der Befehl
ausgeführt wurde.

\item[NextText:] {\it Syntax:\/} {\tt NextText [CYCLE].} {\it Resultat:\/}
\verb@1|0.@ Macht den nächtsten Text in der Textlist zum aktuellen Text
und ein Fenster in dem er angezeigt wird zum aktuellen Fenster. Das Resultat
ist dann 0 wenn kein weiteres Fenster in der Liste vorhanden war, andernfalls
1. Bei gesetzter Option {\sc Cycle} liefert der Befehl immer ein positives
Resultat, da die Liste nun zyklisch durchlaufen wird.

\item[Open:] {\it Syntax:\/} {\tt Open [{\sl filename}].} {\it Resultat:\/}
\verb@1|0.@ Lädt die Datei {\tt\sl filename} und stellt sie im aktuellen
Fenster dar. Wenn der Befehl ohne Argumente aufgerufen wird, wird ein
Dateiauswahlfenster geöffnet, in dem der Benutzer die gewünschte Datei auswählen
kann. Falls an dem alten Text Veränderungen vorgenommen wurden, und er in keinem
weiteren Fenster dargestellt wird, erhält der Benutzer die Möglichkeit ihn zu
sichern oder die Operation abzubrechen. (s.a. "`Öffnen"',  Seite
\pageref{PRJ_Oeffnen}). Dem Resultat kann entnommen werden, ob die angegebene
Datei tatsächlich geladen wurde. Ein negatives (0) Resultat deutet darauf hin,
daß entweder die Datei {\tt\sl filename} nicht geöffnet werden konnte, oder der
Benutzer die Operation abgebrochen hat.

\item[PrevText:] {\it Syntax:\/} {\tt PrevText [CYCLE].} {\it Resultat:\/}
\verb@1|0.@ Macht den vorgehenden Text in der Textliste zum aktuellen Text
und ein zugehöriges Fenster zum aktuellen Fenster. Das Ergebnis gibt an, ob die
Operation durchgeführt wurde und ist dann 0 wenn der aktuelle Text schon der
erste Text der Liste war. Bei gesetzter Option {\sc Cycle} liefert der Befehl
immer ein positives Resultat, da die Liste nun zyklisch durchlaufen wird.

\item[Print:]\label{Print} {\it Resultat:\/} \verb@1|0.@ Druckt den aktuellen
Text aus. In dem erscheinenden Dialogfenster können Schriftart, Zeilenabstand
und Layout des Textes eingestellt werden, sowie verschiedene Optionen
(s.a. "`Drucken"',  Seite \pageref{PRJ_Drucken}). Das Ergebnis gibt an, ob der
Text ausgedruckt wurde.

\item[Save:] {\it Resultat:\/} \verb@1|0.@ Speichert den aktuellen Text.
Wenn der Text neu entstanden war und somit noch keinen Namen trug, wird ein
Dateiauswahlfenster geöffnet in dem der Benutzer Pfad und Namen des Textes
eingeben kann (s.a. "`Speichern"',  Seite \pageref{PRJ_Speichern}). Das
Resultat gibt an, ob der Text gespeichert werden konnte.

\item[SaveAs:] {\it Syntax:\/} {\tt SaveAs [{\sl filename}].} {\it Resultat:\/}
\verb@1|0.@ Speichert den aktuellen Text unter dem angegebenen Dateinamen
{\tt\sl filename} und benennt ihn um. Wird der Befehl ohne Parameter aufgerufen,
so kann der Anwender in einem Dateiauswahlfenster den Dateinamen eingeben
(s.a. "`Speichern als"', Seite \pageref{PRJ_SpeichernAls}). Dem Ergebnis ist zu
entnehmen, ob die Datei tatsächlich gespeichert wurde.

\item[SaveTemp:] {\it Syntax:\/} {\tt SaveTemp {\sl filename}.}
{\it Resultat:\/} \verb@1|0.@ Legt eine Zwischenkopie des Textes unter
dem Namen {\tt\sl filename} an. Der Text im Editor wird dadurch in keiner Weise
beeinflusst: er wird nicht umbenannt, die Zeilen werden nicht "gesäubert" und der
Änderungen--Zähler wird nicht auf null gesetzt. Wie der Name andeutet, dient
dieser Befehl dazu, den gegenwärtigen Zustand des Textes vorübergehend, z.B.
zur Verarbeitung durch ein anderes Programm, zu speichern. Das Resultat gibt an,
ob der Befehl erfolgreich durchgeführt wurde.

\end{description}

\subsection{Bearbeiten}

\begin{description}

\item[DelBack:] {\it Syntax:\/} {\tt DelBack [LINEBEGIN$|$WORD].} Löscht das
vorherige Zeichen (wie Backspace--Taste). Wenn die Schreibmarke nicht in Spalte
null steht wird das linksstehende Zeichen gelöscht, sonst das letzte Zeichen
der vorherigen Zeile --­ die aktuelle Zeile wird also mit der vorherigen Zeile
verbunden. Wenn das Schlüsselwort {\tt LINEBEGIN} angegeben wird, werden alle
Zeichen bis zum Zeilenanfang gelöscht. {\tt DelBack WORD} hingegen löscht das
Wort links von der Schreibmarke.

\item[Delete:] {\it Syntax:\/} {\tt Delete [{\sl n}$|$LINEEND$|$WORD].}
Löscht das Zeichen unter der Schreibmarke (wie Del--Taste). Wird eine
Zahl {\tt\sl n} als Argument übergeben, wird die angegebene Anzahl
Zeichen (Vorgabe: 1) gelöscht. Bei der Angabe des Schalters
{\sc Lineend} werden alle Zeichen bis zum Zeilenende gelöscht, die
nachfolgende Zeile wird jedoch nicht angehängt. {\tt Delete WORD} löscht
das Wort unter der Schreibmarke. Wenn die Schreibmarke auf einem
Delimeter (Komma, Punkt, Doppelpunkt, ...) steht, wird nicht nur das
Wort rechts von der Schreibmarke gelöscht, sondern auch alle
davorstehenden Delimeter.

\item[DelLines:] {\it Syntax:\/} {\tt DelLines [{\sl n}].} Löscht {\tt\sl n}
Zeilen ab der aktuellen Zeile. Wird der Befehl ohne Parameter aufgerufen, wird
eine Zeile gelöscht (Vorgabe).

\item[GetASCII:] {\it Resultat:\/} {\tt\sl code.} Liefert den ASCII-Code
{\tt\sl code} des Zeichens unter der Schreibmarke.

\item[InsASCII:] {\it Syntax:\/} {\tt InsASCII {\sl code}.} Fügt ein Zeichen
mit dem ASCII-Code {\tt\sl code} an der aktuelle Position ein. Dieser Befehl
ermöglicht es insbesondere, Formatierungszeichen (z.B. einen Zeilenumbruch) in
den Text einzufügen.

\item[Insert:] {\it Syntax:\/} {\tt Insert {\sl string}.} Fügt den als
Parameter übergebenen Text {\tt\sl string} an der aktuellen Position der
Schreibmarke ein. Die Syntax entspricht der des ARexx-Befehls Echo. Da der
Befehl nur einen Parameter kennt, kann {\tt\sl string} auch
Leerzeichen enthalten, d.h. es könne quasi beliebig viele (durch
Leerzeichen getrennte) Argumente übergeben werden, die zu einem einzigen
langen String verknüpft und eingefügt werden. Dieser String darf
alle Zeichen des ASCII-Codes beinhalten, insbesondere auch Tabulatoren und
Zeilenumbrüche.

Das folgende Beispiel fügt den Namen der Datei an der Cursorposition in den
Text ein:

\begin{verbatim}
/* Beispiel für Insert */
OPTIONS RESULTS          /* Ergebnisse übermitteln */

Get FILENAME        /* Dateiname mit Pfad besorgen */
Insert "Dateiname:" RESULT         /* und einfügen */
\end{verbatim}

\item[LinkChanges:] Faßt alle bis zum Aufruf von "`LinkChangesDone"'
folgenden Veränderungen am Text zu einer einzigen Änderung zusammen.
So ist es möglich, eine beliebige Anzahl von Änderungen durch einen
einzigen Aufruf von "`Undo"' rückgängig zu machen. Dieser Befehl ist
in Verbindung mit "`LinkChangesDone"' beliebig tief schachtelbar.
Innerhalb eines solchen Blocks bleiben die Befehle "`Undo (ALL)"'
und "`Redo (ALL)"' jedoch ohne Wirkung.

Das folgende Beispiel aktualisiert eine genormte Informationszeichenkette
mit dem Format {\tt /* \$info: dd/mm/yy, hh:mm:ss, version n */}:

\begin{verbatim}
/* Beispiel für LinkChanges & LinkChangesDone */
OPTIONS RESULTS

Get POSITION                /* alte Position merken */
p0=RESULT
DisplayOff               /* Darstellung ausschalten */
Set POSITION 0              /* von Beginn an suchen */
Find NEXT "$info:"                 /* Anfang suchen */
Get POSITION                   /* Position erfragen */
IF RESULT > 0 THEN DO                  /* gefunden? */
  LinkChanges          /* Änderungen zusammenfassen */
  Right 10                       /* zum Datum gehen */
  Delete 8         /* altes Datum löschen: dd/mm/yy */
  Insert DATE(European)    /* neues Datum einsetzen */
  Right 2                    /* zur Zeitmarke gehen */
  Delete 8           /* alte Zeit löschen: hh:mm:ss */
  Insert TIME()              /* neue Zeit einsetzen */
  Right 10              /* zur Versionsnummer gehen */
  Read WORD              /* Versionsnummer einlesen */
  ver=RESULT+1           /* Version um eins erhöhen */
  Delete WORD        /* alte Versionsnummer löschen */
  Insert ver       /* neue Versionsnummer einsetzen */
  Title "Version:" ver           /* --> Titelleiste */
  LinkChangesDone                         /* fertig */
  END
ELSE
  Title "Keinen Versionsstring gefunden!"

Set POSITION p0   /* zur alten Position zurückgehen */
DisplayOn            /* Fensterinhalt aktualisieren */
\end{verbatim}

\item[LinkChangesDone:] Schließt den Block aller seit dem korrespondierenden
Aufruf von "`LinkChanges"' vorgenommenen Änderungen ab.

\item[Read:] {\it Syntax:\/} {\tt Read [{\sl n}$|$LINE$|$WORD].} {\it Resultat:\/}
{\tt\sl string.} Liest {\tt\sl n} Zeichen/eine Zeile/ein Wort aus dem Text. Ohne
Angabe von Parametern wird ein Zeichen gelesen. Die gelesene Zeichenkette
wird als Resultat {\tt\sl string} zurückgegeben und kann, wenn die Schreibmarke
am Ende des Textes stand, auch leer sein.

\item[Redo:] {\it Syntax:\/} {\tt Redo [ALL].} {\it Resultat:\/} \verb@1|0.@
Macht den vorherigen Aufruf von "`Undo"' rückgängig, so daß die letzte Änderung
erneuert wird. Um alle zurückgenommenen Änderungen wieder vorzunehmen, muß der
Schalter {\sc All} angegeben werden. Ob der Befehl wirklich durchgeführt wurde,
läßt sich dem Ergebnis entnehmen ({\tt Redo ALL} liefert jedoch immer 1).

{\bf Wichtiger Hinweis:} Die Anzahl der Schritte die zurückgenommen werden
können ist letztendlich abhängig von der Einstellung im Dialogfenster
"`Bearbeitung"' (s. Seite \pageref{D_Bearbeitung}).

\item[Replace:] {\it Syntax:\/} {\tt Replace [NEXT$|$PREV
[{ICASE$|$WORD$|$LINKCHGS$|$ALL} {\sl search} {\sl replace}]].}
{\it Resultat:\/} \verb@1|0.@ Sucht die Zeichenkette {\tt\sl search}
und ersetzt sie durch {\tt\sl replace}. {\sc Next} und {\sc Prev} geben
die Suchrichtung an, {\sc Icase}, {\sc Word}, {\sc Linkchgs} und
{\sc All} sind Zusatzoptionen die die Arbeitsweise des Befehls steuern:

\begin{tabular}{lp{9cm}}
\sc Next & vorwärts suchen\\
\sc Prev & rückwärts suchen\\
\sc Icase & Groß-/Kleinschreibung nicht unterscheiden\\
\sc Word & nur Wörter ersetzen\\
\sc Linkchgs & Änderungen zusammenfassen (bez. {\sc All})\\
\sc All & alle Vorkommen ohne Rückfrage ersetzen
\end{tabular}

Das Kommando funktioniert, abhängig von den übergebenen Parametern, auf drei
verschiedene Arten:

\begin{enumerate}
\item Wenn der Befehl mit Suchrichtung, evtl. Optionen und Such-- und
Ersetze--String aufgerufen wird, ersetzt er das nächste bzw. alle
(Option {\sc All}) Vorkommen von {\tt\sl search} durch {\tt\sl replace}.
\item Wird nur die Suchrichtung ({\sc Prev}, {\sc Next}) angegeben, werden die
Optionen (außer {\sc All} und {\sc Linkchgs}) und die Zeichenketten
{\tt\sl search} und {\tt\sl replace} von dem letzten Aufruf des Befehls bzw.
den dort im Dialogfenster getätigten Eingaben übernommen, und
dementsprechend das nächste Vorkommen ersezt.
\item Wenn der Befehl ohne Parameter aufgerufen wird, kann der Benutzer in einem
Dialogfenster alle benötigten Parameter selbst einstellen. Die dort
vorgenommenen Einstellungen werden beim nächsten Aufruf von Replace {\sc Next}/Replace
{\sc Prev} übernommen (s.a. "`Ersetzen"', Abschnitt \ref{BRB_Ersetzen}, Seite
\pageref{BRB_Ersetzen}).
\end{enumerate}

Das Ergebnis gibt an, ob Vorkommen ersetzt wurden. Es ist dann 0, wenn der
Benutzer im Dialogfenster "`Abbrechen"' gewählt hat, oder die gesuchte
Zeichenkette nicht gefunden werden konnte.

\item[ToLower:] {\it Syntax:\/} {\tt ToLower [WORD].} Wandelt den markierten Bereich
bzw. das Wort unter dem Cursor in Kleinschreibung um.

\item[ToUpper:] {\it Syntax:\/} {\tt ToUpper [WORD].} Wandelt den markierten Bereich
bzw. das Wort unter dem Cursor in Großschreibung um.

\item[Undo:] {\it Syntax:\/} {\tt Undo [ALL].} {\it Resultat:\/} \verb@1|0.@
Macht die vorhergehende Änderung rückgängig. {\tt Undo ALL} macht alle gemerkten
Änderungen rückgängig. Das Ergebnis lautet dann 0, wenn die vorherige Änderung
nicht rückgängig gemacht werden konnte, weil entweder der Text in seinem
ursprünglichen Zustand ist (null Änderungen), oder die vorhergehende Änderung
nicht aufgezeichnet wurde (Undo-Speicher zu klein, s.a. "`Bearbeitung"',
 Seite \pageref{D_Bearbeitung}).

\end{description}

\subsection{Bereich}

\begin{description}

\item[BeginMark:] Setzt Bereichsanfang und -ende an die aktuelle Position.
Alle Zeichen zwischen Anfangs- und Endpunkt eines Bereiches werden markiert,
d.h. farblich hervorgehoben.

\item[Copy:] {\it Syntax:\/} {\tt Copy [{\sl unit}].} Kopiert den Bereich
in den Zwischenspeicher (Clipboard), ohne die Markierung zu löschen. Der
optionale Parameter {\tt\sl unit} ermöglicht die Benutzung von bis zu
256 verschiedenen, voneinander unabhängigen Einheiten des Zwischenspeiches.
Wird dieser Parameter weggelassen, so wird der Text in die Einheit null kopiert.

Diese Einheit wird von allen textverarbeitenden Programmen benutzt, um
untereinander Texte auszutauschen. So können Sie z.B. einen markierten Bereich
im {\sf Edt} mit dem Kommando "`kopieren"' in den Zwischenspeicher kopieren und
mit der Tastenkombination Amiga/V in ein beliebiges Textfenster, etwa das einer
Textverarbeitung, einfügen. Ebenso können Sie in einem solchen Fenster
einen markierten Bereich mit der Tastenkombination Amiga/C in die
Zwischenspeicher kopieren und im {\sf Edt} mit dem Befehl "`einfügen"' einfügen.

\item[Cut:] {\it Syntax:\/} {\tt Cut [{\sl unit}].} Kopiert den markierten
Textabschnitt in den Zwischenspeicher und löscht ihn. Dieser Befehl hat die
gleiche Wirkung wie die Kommandofolge {\tt Copy {\sl unit}; Erase}. Wird der
Parameter {\tt\sl unit} weggelassen, wird automatisch die Einheit null benutzt
(s.a. "`Copy"').

\item[EndMark:] Setzt das Bereichsende an die gegenwärtige Position der
Schreibmarke.Der Bereichsanfang bleibt erhalten. Wenn noch kein Bereich
markiert war, wird ein neuer definiert, der die gesamte Zeile in der sich
die Schreibmarke befindet umfaßt.

\item[Erase:] Löscht den markierten Bereich ohne ihn vorher in den
Zwischenspeicher zu kopieren. Dieser Befehl macht dann Sinn, wenn entweder
der Speicher knapp ist und eine große Textpassage gelöscht werden soll,
oder der Inhalt des Zwischenspeichers noch gebraucht wird und somit nicht
verändert werden darf.

\item[Paste:] {\it Syntax:\/} {\tt Paste [{\sl unit}].} Dieser Befehl fügt
den Inhalt des Zwischenspeichers an der gegenwärtigen Position der Schreibmarke
in den Text ein. Der Parameter {\tt\sl unit} bezeichnet die
Zwischenspeicher--Einheit. Fehlt er, wird die Einheit null benutzt (s.a. "`Copy"').

\item[PrintClip:] Gibt den markierten Text auf dem Drucker aus. Weitere
Informationen sind der Beschreibung des Befehls "`Print"' in Abschnitt
\ref{Print}, Seite \pageref{Print} zu entnehmen. Das Dialogfenster ist bei "`Drucken"' in
 Seite \pageref{D_Drucken} erklärt.

\item[SaveClip:] {\it Syntax:\/} {\tt SaveClip [{\sl filename}].}
{\it Resultat:\/} \verb@1|0.@ Sichert den markierten Bereich unter dem Namen
{\tt\sl filename}. Fehlt das Argument, wird ein Dateiauswahlfenster geöffnet,
in dem der Benutzer den gewünschten Dateinamen auswählen oder die Operation
abbrechen kann. Das Resultat gibt an, ob der Bereich tatsächlich gespeichert
wurde.

\item[ShiftClip:] {\it Syntax:\/} {\tt ShiftClip [{\sl n}].} Rückt den
markierten Abschnitt um {\tt\sl n} Zeichen ein ($n > 0$) bzw. aus ($n < 0$).
Wenn {\tt\sl n} nicht angegeben wird, wird der markierte Bereich um ein Zeichen
eingerückt.

\item[UnMark:] Löscht die Markierung, ein Bereich ist somit nicht mehr definiert.

\end{description}

\subsection{Fenster}

\begin{description}

\item[ActivateWindow:] Aktiviert das aktuelle Fenster. Dieses Kommando
simuliert das mannuelle Aktivieren eines Fensters mit der Maus.

\item[Busy:] {\it Syntax:\/} {\tt Busy [{\sl message}].} Signalisiert dem
Benutzer, daß die laufende Aktion eine längere Zeit in Anspruch nehmen kann.
Der optionale String {\tt\sl message} sollte eine kurze Information über
die verrichtete Operation enthalten und erscheint in den Titelzeile aller
Fenster des betroffenen Textes. Wird dieser Parameter weggelassen, so wird
der Zustand der Titelzeile eingefroren. Ab AmigaOS 3.0 verwandelt sich
zusätzlich der Mauscursor in eine Uhr.

Dieser Befehl ist in Verbindung mit "`BusyDone"' beliebig tief schachtelbar.
Aus Geschwindigkeitsgründen ist es zweckmäßig, bei Operationen, die nur kurze
Zeit in Anspruch nehmen, den Parameter wegzulassen, um unnötige Verzögerungen
zu vermeiden.

\item[BusyDone:] Hebt den letzten Aufruf von "`Busy"' wieder auf.

\item[FirstWindow:] Macht das erste Fenster der internen Fensterliste zum
aktuellen Fenster und den dort angezeigten Text zum aktuellen Text. Das
Fenster wird jedoch weder aktiviert noch in den Vordergrund gebracht.
In Verbindung mit "`NextWindow"' läßt sich so die gesamte Liste der Fenster
durchgehen, um, wie im folgenden Programm demonstriert, z.B. die Fenster
gleichmäßig auf dem Bildschirm zu verteilen:

\begin{verbatim}
/* layout windows */
OPTIONS RESULTS

Get SCREENHEIGHT
screenHeight=RESULT-11
Get SCREENWIDTH
screenWidth=RESULT
Get WINDOWS
numWindows=RESULT
vw=numWindows
IF numWindows > 4 THEN  vw=2
IF numWindows > 9 THEN  vw=3
IF numWindows > 16 THEN vw=4
IF numWindows > 25 THEN vw=5
h=screenHeight%vw
w=screenWidth%((numWindows+vw-1)%vw)
Get WINDOWID
thisWindow=RESULT
FirstWindow
DO i=0 TO numWindows-1
  SetWindowBox i%vw*w i//vw*h+14 w h
  NextWindow
END
SelectWindow thisWindow
WindowToFront
\end{verbatim}

\item[LastWindow:] Macht das letzte Fenster der internen Fensterliste zum
aktuellen Fenster und den dort angezeigten Text zum aktuellen Text, ohne es zu
aktivieren oder nach vorne zu bringen. In Verbindung mit "`PrevWindow"' läßt sich
so die gesamte Liste der Fenster durchgehen.

\item[NewWindow:] Öffnet ein weiteres Fenster auf den aktuellen Text und macht
es zum aktuellen Fenster.

\item[NextWindow:] {\it Syntax:\/} {\tt NextWindow [CYCLE].} {\it Resultat:\/}
\verb@1|0.@ Macht das nächste Fenster der internen Fensterliste zum aktuellen
Fenster, der in ihm angezeigte Text wird zum aktuellen Text. Existiert kein
weiteres Fenster in der Liste, ist das Ergebnis 0, andernfalls 1. Bei gesetzter
Option {\sc Cycle} liefert der Befehl immer ein positives Resultat, da die Liste
nun zyklisch durchlaufen wird.

\item[PrevWindow:] {\it Syntax:\/} {\tt PrevWindow} {\it Resultat:\/} \verb@1|0.@
Macht das vorherige Fenster der internen Fensterliste zum atuellen Fenster und
den dort angezeigen Text zum aktuellen Text. War das aktelle Fenster schon das
erste Fenster der Liste, liefert der Befehl das Resultat 0, andernfalls 1. Bei
gesetzter Option {\sc Cycle} liefert der Befehl immer ein positives Resultat, da die
Liste nun zyklisch durchlaufen wird.

\item[Quit:] {\it Syntax:\/} {\tt Quit [ALL].} {\it Resultat:\/} \verb@1|0.@
Schließt das aktuelle Fenster nach einer eventuellen Sicherheitsabfrage
(s.a. "`Verlassen"',  Seite \pageref{PRJ_Verlassen}).
Wird das Schlüsselwort {\sc All} angegeben, werden alle Fenster geschlossen
und das Programm verlassen (s.a. "`Beenden"',
Seite \pageref{PRJ_Beenden}). Auch hier erfolgt eine Sicherheitsabfrage wenn
an einem oder mehreren der Texte Änderungen vorgenommen worden sind. Das
Resultat gibt an, ob das aktuelle Fenster bzw. alle Fenster geschlossen
werden konnten.

\item[SelectWindow:] {\it Syntax:\/} {\tt SelectWindow {\sl id}.} Macht das
Fenster mit der Kennung {\tt\sl id} zum aktuellen Fenster, der dort angezeigte
Text wird zum aktuellen Text. Die Kennung eines Fensters kann mit dem Befehl
{\tt Get WINDOWID} in Erfahrung gebracht werden.

\item[SetWindowBox:] {\it Syntax:\/} {\tt SetWindowBox {\sl leftedge}
{\sl topedge} {\sl width} {\sl height}.} Ändert die Position und die
Ausmaße des aktuellen Fensters in Pixel:

\begin{tabular}{ll}
{\tt\sl leftedge} & X--Koordinate\\
{\tt\sl topedge} & Y--Koordinate\\
{\tt\sl width} & Breite\\
{\tt\sl height} & Höhe
\end{tabular}

\item[Title:] {\it Syntax:\/} {\tt Title {\sl message}.} Blendet den Text
{\tt\sl message} vorübergehend in der Titelzeile des aktuellen Fensters ein.

\item[WindowToBack:] Bringt das aktuelle Fenster in den Hintergrund.

\item[WindowToFront:] Bringt das aktuelle Fenster in den Vordergrund.

\end{description}

\subsection{Position}

\begin{description}

\item[Bottom:] Setzt die Schreibmarke in die letzte Zeile des Textes.

\item[Down:] {\it Syntax:\/} {\tt Down [{\sl n}].} Bewegt den Cursor um
{\tt\sl n} Zeilen nach unten. Wird {\tt\sl n} weggelassen wird die Schreibmarke
in die nächste Zeile gesetzt.

\item[Find:] {\it Syntax:\/} {\tt Find [NEXT$|$PREV [{ICASE$|$WORD}
{\sl search}]].} {\it Resultat:\/} \verb@1|0.@ Sucht die Zeichkette
{\tt\sl search} und setzt die Schreibmarke dorthin. {\sc Next} und {\sc Prev}
geben die Suchrichtung an und die Optionen {\sc Icase} und {\sc Word} die
Such--Bedingungen:

\begin{tabular}{ll}
\sc Next & vorwärts suchen\\
\sc Prev & rückwärts suchen\\
\sc Icase & Groß-/Kleinschreibung nicht unterscheiden\\
\sc Word & nur Wörter suchen
\end{tabular}

Abhängig von der Parameter--Struktur arbeitet der Befehl auf drei
verschiedene Weisen:

\begin{enumerate}

\item Wenn der Befehl mit Suchrichtung, evtl. Optionen und
Such--String aufgerufen wird, setzt er die Schreibmarke auf das
nächste/vorherige Vorkommen von {\tt\sl search}.

\item Wird nur die Suchrichtung ({\sc Prev}, {\sc Next}) angegeben,
werden die Optionen und {\tt\sl search} von dem letzten Aufruf des
Befehls bzw. den dort im Dialogfenster getätigten Eingaben übernommen,
und dementsprechend das nächste Vorkommen angesprungen.

\item Wenn der Befehl ohne Parameter aufgerufen wird, kann der Benutzer
in einem Dialogfenster alle benötigten Parameter selbst einstellen. Die
dort vorgenommenen Einstellungen werden beim nächsten Aufruf von Find
{\sc Next}/Find {\sc Prev} übernommen (s.a. "`Suchen"', Seite
\pageref{D_SuchenUndErsetzen}).

\end{enumerate}

Das Ergebnis gibt an, ob die Zeichenkette gefunden wurde. Es ist dann 0,
wenn der Benutzer im Dialogfenster "`Abbrechen"' gewählt hat, oder der
gesuchte String nicht im Text vorhanden war.

\item[First:] Setzt die Schreibmarke an den Anfang der Zeile (Spalte null).

\item[GetBookmark:] {\it Syntax:\/} {\tt GetBookmark {\sl n}.}
{\it Resultat:\/} {\tt\sl position.} Liefert die Position des Lesezeichens
{\tt\sl n}, oder null wenn das Lesezeichen nicht definiert ist. Die
zurückgegebene Position ist zeichenorientiert (nicht Zeile/Spalte), d.h.
eine positive Ganzzahl. {\it Zur Erinnerung:\/} Das erste Zeichen im
Text hat die Position null, das zweite eins, das dritte zwei, u.s.w.,
Zeilenenden werden mitgezählt. Die Befehlskombination
{\tt GetBookmark {\sl n}; Set POSITION RESULT} kann ersetzt werden durch
{\tt GotoBookmark \sl n} (siehe dort).

\item[GotoBookmark:] {\it Syntax:\/} {\tt GotoBookmark {\sl n}.} Springt
zum Lesezeichen {\tt\sl n}. Ist es nicht definiert wird die Schreibmarke
an die Position null (Zeile 0, Spalte 0) gesetzt.

\item[GotoLine:] {\it Syntax:\/} {\tt GotoLine [{\sl n}].} Setzt die
Schreibmarke in die Zeile {\tt\sl n}. Wird {\tt\sl n} nicht angegeben,
kann der Benutzer in einem Dialogfenster die gewünschte Zeilennummer
eingeben oder den Befehl abbrechen.

\item[Last:] Setzt die Schreibmarke ans Zeilenende.

\item[LastChange:] Setzt die Schreibmarke an den Ort der letzten Textänderung.

\item[Left:] {\it Syntax:\/} {\tt Left [{\sl n}].} Bewegt die Schreibmarke
um {\tt\sl n} (Vorgabe: 1) Zeichen nach links.

\item[MatchBracket:] Setzt die Schreibmarke auf die korrespondierende (runde,
geschweifte oder eckige) Klammer.

\item[Move:] {\it Syntax:\/} {\tt Move {\sl n}.} Bewegt die Schreibmarke
um {\tt\sl n} Zeichen vorwärts ($n > 0$) bzw. rückwärts ($n < 0$). {\it Zur
Erinnerung:\/} Zeilenenden und Tabulatoren werden als ein Zeichen betrachtet.

\item[PageDown:] {\it Syntax:\/} {\tt PageDown [{\sl n}].} Bewegt die
Schreibmarke um {\tt\sl n} (Vorgabe: 1) Seiten nach unten.

\item[PageUp:] {\it Syntax:\/} {\tt PageUp [{\sl n}].} Bewegt die
Schreibmarke um {\tt\sl n} (Vorgabe: 1) Seiten nach oben.

\item[Right:] {\it Syntax:\/} {\tt Right [{\sl n}].} Setzt den Cusrsor
um {\tt\sl n} (Vorgabe: 1) Spalten nach rechts.

\item[ScrollDX:] {\it Syntax:\/} {\tt ScrollDX [{\sl n}].} Rollt den
Fensterinhalt um {\tt\sl n} (Vorgabe: 1) Spalten nach links ($n > 0$) bzw. rechts
($n < 0$). Die Schreibmarke wird nicht mitbewegt, die Position im Text ändert
sich also, die Position des Cursors auf dem Bildschirm hingegen nicht.

\item[ScrollDY:] {\it Syntax:\/} {\tt ScrollDY [{\sl n}].} Rollt den
Fensterinhalt um {\tt\sl n} (Vorgabe: 1) Zeilen nach oben ($n > 0$), bzw.
unten ($n < 0$). Die Schreibmarke bleibt dabei an derselben Stelle auf dem
Bildschirm stehen.

\item[SetBookmark:] {\it Syntax:\/} {\tt SetBookmark [{\sl n}].}
{\it Resultat:\/} {\tt [{\sl r}].} Weist dem Lesezeichen {\tt\sl n} die
gegenwärtige Position der Schreibmarke zu (kein Resultat). Wenn {\tt\sl n}
weggelassen wird, sucht der Editor das nächste freie Lesezeichen, weist ihm
die Cursorposition zu und gibt die gefundene Identifikationsnummer {\tt\sl r}
als Ergebnis zurück. {\tt\sl n} und {\tt\sl r} können Werte zwischen 0 und
32.758 annehmen. Es empfiehlt sich, {\tt\sl n} zwischen 10 und 9999 zu wählen,
um die beim Aufruf ohne Parameter zugewiesenen Lesezeichen nicht zu
überschreiben (diese beginnen bei 10000). Die Lesezeichen null bis zehn sind
für die Standart-Konfiguration reserviert.

\item[Top:] Setzt die Schreibmarke in die erste Zeile des Dokuments.

\item[Up:] {\it Syntax:\/} {\tt Up [{\sl n}].} Bewegt die Schreibmarke
{\tt\sl n} (Vorgabe: 1) Zeilen nach oben.

\item[WordBegin:] Setzt die Schreibmarke an den Anfang des Wortes unter/rechts der Schreibmarke

\item[WordEnd:] Setzt die Schreibmarke an das Ende des Wortes unter/links
der Schreibmarke.

\item[WordLeft:] Bewegt die Schreibmarke an das Ende des Wortes links von
der Schreibmarke.

\item[WordRight:] Bewegt die Schreibmarke an den Anfang des Wortes rechts
von der Schreibmarke.

\end{description}

\subsection{Textfalten}

\begin{description}

\item[NewFold:] {\it Syntax:\/} {\tt NewFold [CLOSE].} Erzeugt aus dem markierten
Bereich eine Textfalte. Wenn der Parameter {\tt CLOSE} übergeben wird, wird
die Falte sogleich geschlossen, so daß der in ihr befindliche Text nicht mehr
sichtbar ist. Sollte der markierte Bereich bereits eine Falte enthalten, so
wird diese vor der Erzeugung der neuen Falte aufgelöst (s.a. "`Falte erzeugen"',
Seite \pageref{FLT_FalteErzeugen}).

\item[OpenFold:] Öffnet die unter der Schreibmarke befindliche Textfalte.

\item[CloseFold:] Schließt die unter der Schreibmarke befindliche Textfalte.

\item[ResolveFold:] Öffnet die unter der Schreibmarke befindliche Textfalte
und löst sie auf.

\item[OpenAllFolds:] Öffnet alle im Text befindlichen Falten.

\item[CloseAllFolds:] Schließt alle im Text befindlichen Falten.

\item[ResolveAllFolds:] Löst alle im Text befindlichen Falten auf.

\end{description}

\subsection{Dialogfenster}

\begin{description}

\item[Information:] Zeigt Informationen über das bearbeitete Dokument an. Eine
genauere Beschreibung befindet sich bei "`Über"' auf Seite \pageref{PRJ_Ueber}.

\item[ReqAction:] {\it Syntax:\/} {\tt ReqAction {\sl message} {\sl labels}.}
{\it Resultat:\/} {\tt\sl n.} Öffnet ein Dialogfenster in dem eine von
mehreren Aktionen ausgewählt werden kann (ähnlich den Aufforderungen des
Betriebssystems). Der Parameter {\tt\sl message} enthält den darzustellenden
Text, der aus mehreren durch "`$|$"' getrennten Zeilen bestehen kann,
{\tt\sl labels} die ebenfalls durch "`$|$"' getrennten Beschriftungen der
Aktionssymbole. Dem Ergebnis kann die vorgenommene Auswahl entnommen werden.
Wird das am weitesten rechts stehende Symbol gewählt, ist es null, wird das
erste von links gewählt eins, beim zweiten von links zwei, beim dritten drei,
usw. Soll dem Benutzer lediglich eine Mitteilung gemacht werden, trägt man bei
{\tt\sl labels} nur eine Auswahlmöglichkeit (z.B. "`OK"') ein: das Resultat
lautet dann null.

\begin{verbatim}
/* Beispiel für ReqAction */
OPTIONS RESULTS

choice='"Speichern|Ignorieren|Abbrechen"'
Get FILENAME
msg='"'||RESULT||'|wurde noch nicht gespeichert."'
ReqAction msg choice
echo "Symbol:" RESULT
/* Speichern=1; Ignorieren=2; Abbrechen=3 */
\end{verbatim}

\item[ReqChoice:] {\it Syntax:\/} {\tt ReqChoice {\sl title} {\sl topic}
{\sl labels} [{\sl n}].} {\it Resultat:\/} {\tt (OK {\sl n}) $|$ CANCEL.}
Öffnet ein Dialogfenster, in dem der Benutzer einen von mehreren zur
Auswahl stehenden Punkten wählen kann. Der Parameter {\tt\sl title}
bezeichnet den Fenstertitel, {\tt\sl topic} die Überschrift der
Auswahlpunkte. Die Auswahlpunkte werden (durch "$|$" getrennt) dem
Parameter {\tt\sl labels} übergeben. Beim Öffnen des Fensters ist der
Punkt {\tt\sl n} Vorgabe: 0) vorgewählt. Das Resultat enthält den
String "`OK"' gefolgt von der Nummer {\tt\sl n} des gewählten
Punktes, bzw. "`CANCEL"'.

\begin{verbatim}
/* ein lebensnahes Beispiel für ReqChoice */
OPTIONS RESULTS

aufschnitt='"Schinken|Käse|Wurst"'
ReqChoice '"Auswahl"' '"Aufschnitt"' aufschnitt 1
PARSE VAR RESULT aktion wahl       /* Eingabe auswerten */
IF aktion="OK" THEN
  echo "Sie haben den Aufschnitt" wahl "gewählt."
ELSE
  echo "Abbruch!"
\end{verbatim}

\item[ReqNumber:] {\it Syntax:\/} {\tt ReqNumber {\sl title label}
[{\sl n}].} {\it Resultat:\/} {\tt (OK {\sl n}) $|$ CANCEL.} Öffnet ein
Dialogfenster, in dem der Benutzer eine ganze Zahl eingeben kann. Der
Parameter {\tt\sl title} enthält den Fenstertitel, {\tt\sl label} den
Namen des Zahlenfeldes und {\tt\sl n} den Ausgangswert. Wenn die Eingabe
bestätigt wurde lautet das Ergebnis "`OK"', gefolgt von der eingegebenen
Zahl, anderfalls "`CANCEL"'.

\begin{verbatim}
/* Beispiel für ReqNumber */
OPTIONS RESULTS
ReqNumber '"Bitte geben Sie eine Zahl ein"' "Zahl:" 13
PARSE VAR RESULT aktion zahl     /* Eingabe auswerten */
IF aktion="OK" THEN
  echo "Die Zahl lautet" zahl
ELSE
  echo "Abbruch!"
\end{verbatim}

\item[ReqOptions:] {\it Syntax:\/} {\tt ReqOptions {\sl title} {\sl topic} {\sl labels}
\{0$|$1\}.} {\it Resultat:\/} {\tt (OK {0$|$1}) $|$ CANCEL.} Öffnet ein Dialogfenster,
in dem der Benutzer aus einer Menge von Optionen wählen kann. Der Parameter
{\tt\sl title} bezeichnet den Fenstertitel, {\tt\sl topic} die Überschrift
der Optionen. Die Optionen werden (durch "`$|$"' getrennt) dem Parameter
{\tt\sl labels} übergeben. Diesem Parameter folgt eine (optionale) Reihe in
der hintereinander für jede Option angebeben wird, ob sie aktiv ("`1"') oder
inaktiv ("`0"', Vorgabe) ist. Hierbei muß nicht für jede Option ein Wert
angegeben werden (siehe Beispiel). Das Resultat enthält den String
"`OK"', gefolgt von dem Status für jede Option, bzw. "`CANCEL"'.

\begin{verbatim}
/* Beispiel für ReqOptions */
OPTIONS RESULTS

checks='"RangeChk|StackChk|OvflChk|NilChk"'
ReqOptions '"Modula-2"' '"Prüfungscode"' checks 1 0
/* man beachte, daß die Optionen "OvflChk" und "NilChk" */
/* nicht explizit gesetzt sind.                         */
/* Äquivalent: ReqOptions '"Modula-2"' ... 0 1 0 0      */
PARSE VAR RESULT aktion range stack ovfl nil
/* Eingabe auswerten */
IF aktion="OK" THEN
  echo "Prüfungscode:"
  IF range THEN
    echo "· Bereiche"
  IF stack THEN
    echo "· Stack"
  IF ovfl THEN
    echo "· Überlauf"
  IF nil THEN
    echo "· NIL-Zeiger"
ELSE
  echo "Abbruch!"
\end{verbatim}

\item[ReqString:] {\it Syntax:\/} {\tt ReqString {\sl title} {\sl label}
[{\sl string}].} {\it Resultat:\/} {\tt (OK {\sl zeichenkette}) $|$ CANCEL.} Öffnet
ein Dialogfenster, in dem der Benutzer eine Zeichenkette eingeben kann. Der
Parameter {\tt\sl title} enthält den Fenstertitel, {\tt\sl label} den
Namen des Zahlenfeldes und {\tt\sl string} die Vorbelegung des Textfeldes
(Vorgabe: leer "` "'). Wenn die Eingabe bestätigt wurde, lautet das
Ergebnis "`OK"', gefolgt von der eingegebenen Zeichenkette, andernfalls
"`CANCEL"'.

\begin{verbatim}
/* Beispiel für ReqString */
OPTIONS RESULTS

prompt='"Bitte geben Sie etwas ein"'
'ReqString' prompt "Zeichenkette:" "Irgendwas"
PARSE VAR RESULT aktion string  /* Eingabe auswerten */
IF aktion="OK" THEN
  echo "Das habe Sie eingegeben:" string
ELSE
  echo "Abbruch!"
\end{verbatim}

\end{description}

\subsection{Darstellung}

\begin{description}

\item[CursorOff:] Schaltet die Darstellung und Aktualisierung der Schreibmarke
ab. Ebenso wie "`Busy"' und "`BusyDone"' sind "`CursorOff"' und "`CursorOn"'
 schachtelbare Befehle. Das Anwendungsgebiet liegt vor allem in Makros, die in
schneller Folge verschiedene Positionen im sichtbaren Bereich anspringen. In
den meisten Fällen ist jedoch das Ausschalten der gesamten Textdarstellung via
"`DisplayOff"' vorzuziehen.

\item[CursorOn:] Schaltet den Cursor wieder ein, und setzt ihn an die
aktuelle Position im Text.

\item[DisplayBeep:] Läßt den Bildschirm aufblitzen.

\item[DisplayOff:] Schaltet die Aktualisierung des Fensterinhaltes ab. Das ist
vor allem dann sinnvoll wenn ein Makro entweder sehr viele Änderungen vornimmt,
oder die zu ändernden Textpassagen weit auseinander liegen, so daß der Editor
scrollen müsste. "`DisplayOn"' und "`DisplayOff"' können beliebig tief
geschachtelt werden.

\item[DisplayOn:] Schaltet die Darstellung wieder an.

\item[Redraw:] Zeichnet den Fensterinhalt neu.

\end{description}

\subsection{Variablen}

\begin{description}

\item[Get:] {\it Syntax:\/} {\tt Get {\sl var}.} {\it Resultat:\/}
{\tt\sl wert.} Liefert den Wert der Variablen {\tt\sl var}. Die Namen
und Typen der Variablen sind der Liste am Ende dieses Abschnitts zu
entnehmen.

\item[Set:] {\it Syntax:\/} {\tt Set {\sl var} {\sl wert}.} Weist der Variablen
{\tt\sl var} den Wert {\tt\sl wert} zu. Folgende Variablen können mit
"`Set"' nicht verändert werden:

\begin{itemize}
\item changes
\item length
\item lineBegin
\item lineEnd
\item lineLen
\item mark
\item screenHeight
\item screenWidth
\item size
\item textID
\item texts
\item windowID
\item windows
\end{itemize}

\subsubsection{Die Variablen}

\begin{tabular}{l|p{67cm}|l}
Name & Bedeutung & Typ\\
\hline
\sf autoIndent & automatische Einrücken? & Boolean\footnote{0=ja; 1=nein}\\
\sf changes & Anzahl der Änderungen & Integer\footnote{Ganzzahl}\\
\sf cleanLines & Zeilen säubern? & Boolean\\
\sf column & Spalte & Cardinal\footnote{Ganzzahl $>=$ 0}\\
\sf filename & Dateiname mit Pfad & String\\
\sf findStr & Such--String im Dialogfenster & String\\
\sf icons & Piktogramme erzeugen? & Boolean\\
\sf insert & Einfügemodus? & Boolean\\
\sf length & Länge der Datei in Zeilen & Cardinal\\
\sf line & Zeile & Cardinal\\
\sf lineBegin & Position des Zeilenanfangs & Cardinal\\
\sf lineEnd & Position des Zeilenendes & Cardinal\\
\sf lineLen & Zeilenlänge inkl. Zeilenumbruch & Cardinal\\
\sf margin & rechter Rand bei WordWrap & Cardinal\\
\sf mark & Textmarkierung vorhanden? & Boolean\\
\sf markBegin & Position des Markierungsanfangs & Cardinal o.
-1\footnote{wenn keine Marke vorhanden}\\
\sf markEnd & Position des Markierungsendes & Cardinal o. -1\\
\sf name & Dateiname ohne Pfad & String\\
\sf path & Pfad der Datei & String\\
\sf position & Position & Cardinal\\
\sf replaceStr & Ersetze--String im Dialogfenster & String\\
\sf screenHeight & Höhe des Screens & Cardinal\\
\sf screenWidth & Breite des Screens & Cardinal\\
\sf size & Größe der Datei in Zeichen & Cardinal\\
\sf textID & Kennung des Textes & Cardinal\\
\sf texts & Anzahl bearbeiteter Texte & Cardinal\\
\sf windowCols & Breite des Fenster in Spalten & Cardinal\\
\sf windowHeight & Höhe des Fensters in Pixels & Cardinal\\
\sf windowID & Kennung des Fensters & Cardinal\\
\sf windowLeft & X--Koordinate des Fensters & Cardinal\\
\sf windowLines & Höhe des Fensters in Zeilen & Cardinal\\
\sf windowTop & Y--Koordinates des Fensters & Cardinal\\
\sf windows & Anzahl geöffneter Edt--Fenster & Cardinal\\
\sf windowWidth & Breite des Fensters in Pixels & Cardinal\\
\sf wordWrap & automatischer Zeilenumbruch? & Boolean
\end{tabular}

\end{description}

\subsection{ARexx}

\begin{description}

\item[BeginMacro:] Versetzt den Editor in den Aufnahme--Modus, um ein
Makro aufzuzeichnen. Alle Aktionen, die der Benutzer per Tastaturkommando
oder Menüpunkt ausführt, werden aufgezeichnet. In einem Dialogfenster kann
der Benutzer einstellen, welche Eingaben aufgezeichnet werden (s.a.
"`Makro beginnen"', Seite \pageref{RX_MakroBeginnen}). "`EndMakro"' beendet
den Aufnahmemodus.

\item[EndMacro:] Beendet die durch "`BeginMacro"' eingeleitete
Befehlssequenz (Makro). Alle zwischen "`BeginMacro"' und "`EndMacro"'
ausgeführten Kommandos sind im Speicher aufgezeichnet und können nun z.B.
nochmals ausgeführt oder als ARexx-Programm gespeichert werden.

\item[
EnterRexx:] Öffnet ein Fenster in dem der Anwender eine
ARexx--Befehlszeile eingeben kann.

\item[ExecMacro:] Führt im Speicher befindliche Makro nochmals aus.

\item[ExecRexx:] {\it Syntax:\/} {\tt ExecRexx [{\tt\sl filename}].} Führt das
ARexx--Programm {\tt\sl filename} aus. Wenn {\tt\sl filename} nicht angegeben
wird kann das auszuführende Programm im Dateiauswahlfenster gewählt werden.

\item[FreeMacro:] Löscht das im Speicher aufgezeichnete Makro.

\item[RepeatRexx:] Wiederholt die bei "`EnterRexx"' eingegebene Befehlsfolge.

\item[SaveMacro:] {\it Syntax:\/} {\tt SaveMacro [{\tt\sl filename}].} Speichert
das aufgezeichnete Makro als ARexx--Programm in einer Datei. Wird der
Dateiname {\tt\sl filename} nicht angegeben, wird ein Dateiauswahlfenster
geöffnet, in dem der Benutzer den gewünschten Dateinamen eingeben kann.

\end{description}

\subsection{Konfiguration}

Dieser Abschnitt beschreibt die Befehle, die die Menübelegung und die
Belegung der Tastatur steuern. Bis auf den Befehl "`SetKey"' gilt für
alle hier aufgeführten Befehle, daß Sie {\em nur} in der
Startup--Datei\footnote{meist {\sl S:Edt--Startup.edt}} Wirkung
zeigen.

\subsubsection{Tastatursequenzen}

Alle Kommandos dieses Abschnitts ermöglichen die Vereinbarung einer
optionalen Tastensequenz (engl. shortcut). Die Definition
dieser Sequenz erfolgt nach einer feststehenden Syntax. Die Tasten folgen
einer einheitlichen Namesgebung (s. Tabelle Seite \pageref{KeyIdents}),
die {\em nicht} zwischen Groß- und Kleinschreibung unterscheidet.
Bei der Definition einer Tastenfolge wird zwischen {\em qualifizierenden}
und {\em abschließenden}  Tasten unterschieden. Zur ersten Gruppe
gehören Tasten wie die Shift--Taste, Alt-- oder die
Amiga--Taste, d.h. Tasten die gehalten werden, während eine
{\em abschließende} Taste, z.B. die Taste {\sf A}, gedrückt wird.

Eine Tastenfolge wird durch eine Folge von qualifizierenden Tasten,
die von einer abschließenden Taste beendet wird, definiert. Die Anzahl
qualifizierender Tasten ist hierbei beliebig --- sie können auch ganz
weggelassen werden. Es muß jedoch genau eine abschließende Taste angegeben
werden.

Eine weitere Konvention betrifft die Beachtung von Groß- und Kleinschreibung.
Wenn sie z.B. eine Tastatursequenz {\tt ctrl X}\footnote{Sie könnten auch
{\tt ctrl shift x} schreiben} ({\em Wichtig:\/} Großbuchstabe "`X"') definieren,
jedoch {\tt ctrl x} nicht belegen, so genügt es, nur die Ctrl--Taste und
dann die Taste {\sf X} {\em ohne} Shift--Taste zu drücken. Die
Shift--Taste zur Unterscheidung zwischen Groß- und Kleinschreibung ist
nur dann notwendig, wenn auch die Tastaturbelegung in dem jeweiligen Fall
zwischen Groß- und Kleinbuchstaben unterscheidet. Selbstverständlich gilt
dieses Prinzinp nur für Tasten des Alphabets (A--Z, Ä, Ö, Ü) und hier nur
dann, wenn bei der Definition die Großschreibung verwendet wird.

{\bf Wichtiger Hinweis:} Bei der Erkennung einer Tastenfolge wird der
Zustand der Capslock--Taste {\em ignoriert}. Wenn bei aktiver
Capslock--Taste z.B. die Alt--Taste und die Taste {\sf A} gedrückt
werden, wird dieses als die Tastenkombination {\sf Ctrl/a} betrachtet,
keineswegs als {\sf Ctr/A} bzw. {\sf Ctrl/Shift/a}.

Das folgende Beispiel belegt die Tasten so, daß {\sf Ctrl/M} oder
{\sf Ctrl/m} zur Ausgabe des Textes "`Hallo Welt!"' auf der Konsole führt,
während {\sf Ctrl/c} --- jedoch nicht {\sf Ctrl/C} --- die Meldung
"`Abbrechen"' ausgibt. Die Taste {\sf B} wird schließlich so belegt, daß bei
{\sf Ctrl/B} "`großes B"' geschrieben wird, bei {\sf Ctrl/b} jedoch
"`kleines b"':

\begin{verbatim}
/* Beispiel für Tastatursequenzen */

SetKey ctrl "M" "echo 'Hallo Welt!'"  /* Variante 1 */
SetKey ctrl "c" "echo 'Abbrechen'"    /* Variante 2 */
SetKey ctrl "B" "echo 'großes B'"     /* Variante 3 */
SetKey ctrl "b" "echo 'kleines b'"
\end{verbatim}

\begin{description}

\item[DisplayPrefs:] Äquivalent zu dem Menüpunkt "`Darstellung"' (s. Seite
\pageref{EIN_Darstellung}).

\item[EditPrefs:] Entspricht dem Menüpunkt "`Bearbeitung"' des Menüs
"`Einstellungen"' (s. Seite \pageref{EIN_Bearbeitung}).

\item[Item:]\label{CNF_Item} {\it Syntax:\/} {\tt Item [{\sl label} [[[GLOBAL]
SWITCH 0$|$1] [KEY \{{\sl key\/}\} [NODESC]] [RX] {\sl commands}]].} Definiert einen
Menüpunkt mit dem Titel {\tt\sl label}. Wenn dieser Menüpunkt angewählt wird,
führt {\sf Edt} die Befehle {\tt\sl commands} aus. Ist die Option {\sc Rx}
angegeben, wird {\tt\sl commands} als Dateiname eines ARexx--Programms interpretiert,
andernfalls als Befehlszeile. Der optionale {\sc Key}--Part dient zur Definition
einer Tastaturabkürzung analog zum Befehl "`SetKey"'. Er besteht aus einer
Folge von Tastenbezeichnern {\tt\sl key}. Wenn der Editor unter AmigaOS 3.0
oder höher arbeitet, wird eine Beschreibung der Tastaturabkürzung rechtsbündig
neben dem Titel {\tt\sl label} angezeigt. Das Schlüsselwort {\sc Nodesc}
unterbindet dieses (Ausnahme: Amiga--Taste). Ist {\sc Switch} angegeben, erhält
der Menüpunkt einen Haken und dient als Umschalter. Folgt auf {\sc Switch}
eine 1, ist der Haken am Anfang gesetzt, andernfalls nicht. Im Normalfall ist
ein Umschalter auf den im jeweiligen Fenster bearbeiteten Text bezogen, d.h.
wird er in einem Fenster umgeschaltet, dann ändert sich auch sein Zustand in
allen anderen Fenstern in denen der selbe Text angezeigt. Das Schlüsselwort
{\sc Global} erweitert diesen Geltungsbereich auf alle Texte, so daß der
Menüpunkt in allen Fenstern des Editors den gleichen Zustand (abgehakt/nicht
abgehakt) hat. Beim Aufruf ohne Parameter wird ein horizontaler Trennstrich im
Menü eingefügt. Der Aufruf nur mit einem Titel erzeugt einen Menüpunkt ohne
Kommando, dem durch "`SubItem"' (s. Seite \pageref{SubItem}) mehrere Unterpunkte
angehängt werden können.

\begin{verbatim}
/* Beispiel für ein kleines Menü "Test" */

Menu "Test"
Item "Menüpunkt" KEY amiga "M" RX "Programm.edt"
Item "Menüunterpunkte"
SubItem '"Neues Fenster"' KEY amiga "N" "NewWindow"
SubItem "Hello.edt" KEY ctrl alt "H" NODESC 'echo "Hallo Welt!"'
Item    /* Trennlinie */
Item "Test" SWITCH 0 KEY alt "O" "DisplayBeep"
Item "Hilfe" KEY help "echo 'Hilfestellung'"
Item '"Alle Verlassen"' KEY alt shift "Q" "QUIT ALL"
Item "Verlassen" KEY amiga "Q" "QUIT"
\end{verbatim}

\item[Menu:] {\it Syntax:\/} {\tt Menu {\sl label}.} Definiert einen Menü
mit dem Titel {\tt\sl label}.

\item[SaveSettings:] Speichert verschiedene Einstellungen im Editor, wie z.B.
die Fenstergröße oder die Optionen in den Dialogfenstern, als Vorgaben ab.
Dieser Befehl entspricht dem Menüpunkt "`als Vorgaben speichern"' der
Standart--Konfiguration (s. Seite \pageref{EIN_AlsVorgabenSpeichern}).

\item[SetKey:] {\it Syntax:\/} {\tt SetKey \{{\sl key\/}\} [RX] {\sl commands}.}
Belegt die durch eine Folge von Tastenbezeichnern {\sl key}
spezifizierte Tastenkombination mit der Kommandofolge {\tt\sl commands}. Wenn
die Option {\sc Rx} gesetzt ist, wird {\tt\sl commands} als Dateiname eines
ARexx--Skripts aufgefaßt, andernfalls als Befehlszeile.

\begin{verbatim}
/* Beispiel für SetKey */

SetKey ctrl alt "q" "Quit ALL"
SetKey ctrl "b" "DelLines 1"
SetKey ctrl "?" "echo 'Fragezeichen'"
SetKey ctrl alt shift numpad "*" "echo 'Kombination'"
\end{verbatim}

\item[SubItem:]\label{SubItem} {\it Syntax:\/} {\tt SubItem [{\sl label} [SWITCH 0$|$1]
[KEY \{{\sl key\/}\} [NODESC]] [RX] {\sl commands}].} Dieser Befehl
funktioniert genauso wie "`Item"'. Der entscheidene Unterschied liegt
darin, daß statt eines Menüpunktes ein Menü{\em unter\/}punkt erzeugt
wird. Die Bedeutung der Parameter entnehmen Sie bitte der Beschreibung
zum Befehl "'Item"' (s. Seite \pageref{CNF_Item}).

\end{description}

\begin{table}\label{KeyIdents} {\bf Tastenbezeichner}\\[0.5ex]
\begin{tabular}{l|l}
Bezeichner & Name in dieser Dokumentation\\
\hline
\tt ALT & linke oder rechte Alt--Taste\\
\tt AMIGA & rechte Amiga--Taste\\
\tt BACKSPACE & Backspace--Taste\\
\tt CTRL & Ctrl--Taste\\
\tt DEL & Del--Taste\\
\tt DOWN & $\downarrow$--Taste\\
\tt ENTER & Enter--Taste (schließt NUMPAD ein)\\
\tt ESC & Escape--Taste\\
\tt F1..F10 & Funktionstaste F1..F10\\
\tt HELP & Help--Taste\\
\tt LEFT & $\leftarrow$--Taste\\
\tt NUMPAD & Taste des Ziffernblocks\\
\tt RETURN & Return--Taste\\
\tt RIGHT & $\rightarrow$--Taste\\
\tt SHIFT & Shift--Taste\\
\tt SPACE & Space--Taste\\
\tt TAB & Tabulator--Taste\\
\tt UP & $\uparrow$--Taste
\end{tabular}
\end{table}

\subsection{Modula-2}

Dieses Kapitel ist nur gültig für die spezielle M2Amiga-Version des Editors. Die
hier genannten Kommandos sind bei {\sf Edt} nicht verfügbar.

\begin{description}

\item[Compile:] Übersetzt den aktuellen Textspeicher. Hierzu muß der Compiler
{\sf m2c} aktiv sein, da er über seine
ARexx--Schnittstelle direkt angesteuert wird. Falls bei der Übersetzung
Fehler im Quelltext gefunden wurden, werden diese am Anschluß angezeigt.

\item[Execute:] Führt das angezeigte Programm im CLI--Modus aus. Wenn Parameter
an das Programm übergeben werden sollen, so kann dies in dem Dialogfenster
geschehen, daß vor der Ausführung geöffnet wird.

\item[FirstError:] {\it Resultat:\/} {\tt 0$|$1.} Springt zum ersten Fehler in der
Fehlerliste. Das Ergebnis gibt an, ob Fehler vorhanden waren.

\item[GotoError:] {\it Syntax:\/} {\tt GotoError {\sl n}.} {\it Resultat:\/} {\tt 0$|$1.}
Springt zum Fehler {\tt\sl n} (gezählt von 0) in der Liste. Dem Resulat ist zu
entnehmen ob der Fehler angesprungen werden konnte.

\item[LoadErrors:] {\it Resultat:\/} {\tt 0$|$1.} Lädt die Fehlerliste der bearbeiteten
Datei und springt zum ersten Fehler. Das Ergebnis gibt an, ob eine Fehlerdatei
existiert. Wenn keine Fehler vorhanden sind, lautet das Resultat demzufolge 0.

\item[Link:] Bindet das bearbeitete Modul zu einem Hauptprogramm. Hierzu muß
der Linker m2l aktiv sein, da er wie der Compiler über ARexx angesprochen
wird.

\item[Make:] Ruft das Make-Werkzeug für den bearbeiteten Text auf.

\item[NextError:] {\it Resultat:\/} {\tt 0$|$1.} Geht zum nächsten Fehler. Wenn es
keine weiteren Fehler gab, lautet das Ergebnis 0, sonst 1.

\item[PrevError:] {\it Resultat:\/} {\tt 0$|$1.} Setzt den Cursor zum vorherigen
Fehler. Wenn bereits Fehler 0 erreicht war, lautet das Ergebnis 0, sonst 1.

\end{description}

\section{Fehlermeldungen}

\subsection{ARexx nicht gestartet}

\begin{verbatim}
Konnte ARexx nicht finden.
Bitte "RexxMast" starten.
\end{verbatim}

Dieser Fehler tritt auf wenn ARexx nicht aktiv ist. {\sf Edt} benötigt ARexx.
Deshalb ist es unumgänglich, {\sf RexxMast} vorher zu starten. Damit {\sf RexxMast} bei
jedem Hochfahren des Rechners automatisch gestartet wird, können Sie entweder das
Piktogramm {\sf RexxMast} von der Schublade {\sl System} in die Schublade
{\sl WBStartup} ziehen, oder folgende Zeile der Datei {\sl S:user-startup} anfügen:

\begin{verbatim}
run >NIL: RexxMast
\end{verbatim}

\subsection{Speichermangel}

\begin{verbatim}
Nicht genügend Speicher verfügbar.
Nochmal versuchen oder Edt
geordnet beenden?
\end{verbatim}

Wenn der Speicher so knapp ist, daß diese Fehlermeldung auftritt, haben Sie
folgende Möglichkeiten zur Auswahl:

\begin{itemize}
\item Sie schließen einige Fenster anderer Programme oder beenden diese und
wählen dann "`Nochmal versuchen"'. Wenn Sie Glück haben, ist dadurch soviel
Speicher freigeworden, daß Sie weiterarbeiten können. Auf jeden Fall sollten
Sie jedoch dann weniger Texte gleichzeitig bearbeiten.

\item Sie wählen "`Beenden"'. Sie können nun jeden Text einzeln speichern, als
wenn Sie "`Beenden"' im Menü "`Projekt"' gewählt hätten (s. Seite
\pageref{PRJ_Beenden}). Der Editor wird jedoch auf jeden Fall verlassen.
\end{itemize}

\subsection{Fehlende Bibliotheken}

\begin{verbatim}
Edt failed: missing xxx.library
\end{verbatim}

Diese Fehlermeldung deutet auf eine fehlerhafte Installation, entweder des Editors oder
der Workbench hin, da vom Editor benötigte Bibliotheken (im Verzeichnis LIBS:) nicht
gefunden werden konnten. Falls Sie unter AmigaOS 2.04 arbeiten und die Bibliothek
{\sf edt\_os37.library} nicht gefunden wird, müssen Sie diese von den Orginaldisketten
neu kopieren.

\subsection{Abbruch mit Fehlercode}

\begin{verbatim}
Edt failed: Code #xxxx
\end{verbatim}

Hier handelt es sich um schwererwiegende Fehler.\\[0.5ex]

\begin{tabular}{l|p{7cm}}
Code & Bedeutung\\
\hline
A001 & veraltetes Betriebssystem: {\sf Edt} benötigt min. AmigaOS 2.04\\
B001 & Fehler beim Erzeugen des Piktogramms
\end{tabular}\\[0.5ex]

Andere Fehlercodes deuten auf einen äußerst kritischen Systemzustand hin. In
diesem Fall sollten Sie den Computer bei nächster Gelegenheit zurücksetzen, da
vielleicht ein im Speicher "`Amok laufendes"' Programm wichtige Speicherbereiche
überschrieben haben könnte. Speichern Sie in diesem Fall geänderte Texte
unter anderem Namen ab, da sie evtl. beschädigt sein könnten.

\subsection{Abruptes Beenden}

Sollte der Editor plötzlich und ohne Fehlermeldung beendet werden, sollten Sie wie
bei eben genannter Situation handeln. Die Ursache für dieses Verhalten könnte
einerseits in einem außer Kontrolle geratenen Programm liegen oder aber es könnte
sich um eine Fehlfunktion seitens des Editors selbst handeln. Speichern Sie deshalb
geänderte Texte in jedem Fall unter neuem Namen ab, um Datenverlusten vorzubeugen.

\end{document}
